]> git.ipfire.org Git - ipfire.org.git/commitdiff
docs: Deliver images in WEBP format if the browser supports it
authorMichael Tremer <michael.tremer@ipfire.org>
Sat, 6 Jan 2024 18:29:42 +0000 (18:29 +0000)
committerMichael Tremer <michael.tremer@ipfire.org>
Sat, 6 Jan 2024 18:29:42 +0000 (18:29 +0000)
Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
src/backend/wiki.py
src/web/docs.py

index 6bc2cf7a16787f806b0e704035b1380be019bbfe..349a94d08b3b76324f518eb471a86da4c6813b11 100644 (file)
@@ -685,13 +685,16 @@ class File(misc.Object):
                if res:
                        return bytes(res.data)
 
-       async def get_thumbnail(self, size):
+       async def get_thumbnail(self, size, format=None):
                assert self.is_bitmap_image()
 
-               cache_key = "-".join((
+               cache_key = ":".join((
+                       "wiki",
+                       "thumbnail",
                        self.path,
                        util.normalize(self.filename),
                        self.created_at.isoformat(),
+                       format or "N/A",
                        "%spx" % size,
                ))
 
@@ -701,7 +704,7 @@ class File(misc.Object):
                        return thumbnail
 
                # Generate the thumbnail
-               thumbnail = util.generate_thumbnail(self.blob, size)
+               thumbnail = util.generate_thumbnail(self.blob, size, format=format)
 
                # Put it into the cache for forever
                await self.backend.cache.set(cache_key, thumbnail)
index 5f200b041ecabf9bbaa46cf2fd74d2efd4bc835a..1570a3d45aef7051e928eca520806ba93936c7b0 100644 (file)
@@ -134,11 +134,20 @@ class FileHandler(base.BaseHandler):
                        self.render("docs/files/detail.html", page=page, file=file)
                        return
 
+               # Get image size
                size = self.get_argument_int("s", None)
 
                # Check if image should be resized
                if size and file.is_bitmap_image():
-                       blob = await file.get_thumbnail(size)
+                       # Send WEBP if the browser supports
+                       if self.browser_accepts("image/webp"):
+                               format = "WEBP"
+
+                       # Fall back to the native format
+                       else:
+                               format = None
+
+                       blob = await file.get_thumbnail(size, format=format)
                else:
                        blob = file.blob