]> git.ipfire.org Git - ipfire.org.git/commitdiff
util: Accept raw PIL images as input
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 6 Jan 2024 17:00:41 +0000 (17:00 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 6 Jan 2024 17:00:41 +0000 (17:00 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/util.py

index cddd677b48e0bb05773ae0964ba89de4f039df86..80251f16a115b38963efa8100d5752cfb477a6c6 100644 (file)
@@ -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))