From: Michael Tremer Date: Sat, 6 Jan 2024 17:00:41 +0000 (+0000) Subject: util: Accept raw PIL images as input X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=221cd6bc0c5f7bdf76089f6ca4373be4844fbff4;p=ipfire.org.git util: Accept raw PIL images as input Signed-off-by: Michael Tremer --- diff --git a/src/backend/util.py b/src/backend/util.py index cddd677b..80251f16 100644 --- a/src/backend/util.py +++ b/src/backend/util.py @@ -206,21 +206,27 @@ def normalize(s): return "-".join(s.split()) -def generate_thumbnail(data, size, square=False, **args): - assert data, "No image data received" +def generate_thumbnail(image, size, square=False, format=None, **args): + assert image, "No image data received" - try: - image = PIL.Image.open(io.BytesIO(data)) + if not isinstance(image, PIL.Image.Image): + image = io.BytesIO(image) + + try: + image = PIL.Image.open(image) - # If we cannot open the image, we return it in raw form - except PIL.UnidentifiedImageError as e: - return data + # If we cannot open the image, we return it in raw form + except PIL.UnidentifiedImageError as e: + return image # Save image format - format = image.format + format = format or image.format or "JPEG" # Fetch any EXIF data - exif = image._getexif() + try: + exif = image._getexif() + except AttributeError as e: + exif = None # Rotate the image if exif: @@ -234,7 +240,7 @@ def generate_thumbnail(data, size, square=False, **args): image = image.rotate( 90, expand=True) # Remove any alpha-channels - if image.format == "JPEG" and not image.mode == "RGB": + if format == "JPEG" and not image.mode == "RGB": # Make a white background background = PIL.Image.new("RGBA", image.size, (255,255,255))