From db08ee1f3fc62526838f435a3c2d174f87dfe984 Mon Sep 17 00:00:00 2001 From: Mauro Amico Date: Sat, 26 Apr 2025 13:25:53 +0200 Subject: [PATCH 1/4] webp imageinfo --- plone/namedfile/tests/test_storable.py | 35 ++++++++++++++++++++++++++ plone/namedfile/utils/__init__.py | 31 ++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) diff --git a/plone/namedfile/tests/test_storable.py b/plone/namedfile/tests/test_storable.py index bf4dc35..280c495 100644 --- a/plone/namedfile/tests/test_storable.py +++ b/plone/namedfile/tests/test_storable.py @@ -128,3 +128,38 @@ def count_reads(self, size=-1): self.assertEqual( read_bytes, 0, "Validation is reading the whole blob in memory" ) + + def test_large_webp_storable(self): + # ensure we don't read the whole file into memory + + old_open = Blob.open + blob_read = 0 + blob_write = 0 + old_read = BlobFile.read + read_bytes = 0 + + def count_open(self, mode="r"): + nonlocal blob_read, blob_write + blob_read += 1 if "r" in mode else 0 + blob_write += 1 if "w" in mode else 0 + return old_open(self, mode) + + def count_reads(self, size=-1): + nonlocal read_bytes + res = old_read(self, size) + read_bytes += len(res) + return res + + with patch.object(Blob, "open", count_open), patch.object( + BlobFile, "read", count_reads + ): + fi = NamedBlobImage(getFile("900_lossy.webp"), filename="900.webp") + self.assertEqual((900, 900), fi.getImageSize()) + self.assertLess( + read_bytes, + fi.getSize(), + "Images should not need to read all data to get exif, dimensions", + ) + self.assertEqual( + blob_read, 3, "blob opening for getsize, get_exif and getImageInfo only" + ) diff --git a/plone/namedfile/utils/__init__.py b/plone/namedfile/utils/__init__.py index 54eb026..87f7a68 100644 --- a/plone/namedfile/utils/__init__.py +++ b/plone/namedfile/utils/__init__.py @@ -203,11 +203,40 @@ def getImageInfo(data): content_type = "image/x-ms-bmp" width, height = struct.unpack(" 30 and data[:4] == b'RIFF' and data[8:12] == b'WEBP': + # handle WEBPs + content_type = "image/webp" + chunk_type = data[12:16] + if chunk_type == b'VP8 ': + # WebP lossy (VP8): width and height are at offset 26–30 (2 bytes each, little endian) + width = int.from_bytes(data[26:28], 'little') & 0x3FFF + height = int.from_bytes(data[28:30], 'little') & 0x3FFF + elif chunk_type == b'VP8L': + # WebP lossless (VP8L): dimensions are encoded in 4 bytes at offset 21–25 + b = data[21:25] + if len(b) >= 4: + b0, b1, b2, b3 = b + width = ((b1 & 0x3F) << 8 | b0) + 1 + height = ((b3 & 0xF) << 10 | b2 << 2 | (b1 >> 6)) + 1 + elif chunk_type == b'VP8X': + # Extended WebP (VP8X) + # Width: bytes 24-26 (little endian, minus 1) + # Height: bytes 27-29 (little endian, minus 1) + width_bytes = data[24:27] + height_bytes = data[27:30] + if len(width_bytes) < 3 or len(height_bytes) < 3: + return None + width = int.from_bytes(width_bytes, 'little') + 1 + height = int.from_bytes(height_bytes, 'little') + 1 + else: + # Not supported: could be animation, etc. + pass + elif size and b"http://www.w3.org/2000/svg" in data: # handle SVGs content_type, width, height = process_svg(data) - else: + if (width, height) == (-1, -1): # Use PIL / Pillow to determ Image Information try: img = PIL.Image.open(BytesIO(data)) From 6bb89c4d0a5a718fb065d8a93d46283d7fdd7bf5 Mon Sep 17 00:00:00 2001 From: Mauro Amico Date: Sun, 27 Apr 2025 22:45:28 +0200 Subject: [PATCH 2/4] changelog + tests --- .gitignore | 1 + news/181.bugfix | 1 + plone/namedfile/tests/900.webp | Bin 0 -> 127602 bytes plone/namedfile/tests/image.bmp | Bin 0 -> 5662 bytes plone/namedfile/tests/image_loseless.webp | Bin 0 -> 48 bytes plone/namedfile/tests/image_lossy.webp | Bin 0 -> 1496 bytes plone/namedfile/tests/test_storable.py | 47 +++++++++++++++++++++- plone/namedfile/tests/test_utils.py | 27 +++++++++++++ plone/namedfile/utils/__init__.py | 16 ++++---- 9 files changed, 83 insertions(+), 9 deletions(-) create mode 100644 news/181.bugfix create mode 100644 plone/namedfile/tests/900.webp create mode 100644 plone/namedfile/tests/image.bmp create mode 100644 plone/namedfile/tests/image_loseless.webp create mode 100644 plone/namedfile/tests/image_lossy.webp diff --git a/.gitignore b/.gitignore index a602abe..6a9a394 100644 --- a/.gitignore +++ b/.gitignore @@ -38,6 +38,7 @@ parts/ pyvenv.cfg var/ local.cfg +.python-version # mxdev /instance/ diff --git a/news/181.bugfix b/news/181.bugfix new file mode 100644 index 0000000..2d1ea98 --- /dev/null +++ b/news/181.bugfix @@ -0,0 +1 @@ +Support for extracting metadata from WebP images without loading the entire image into memory, as already done for other formats. [mamico] diff --git a/plone/namedfile/tests/900.webp b/plone/namedfile/tests/900.webp new file mode 100644 index 0000000000000000000000000000000000000000..c2c4bfdbea5fb6fe4ad963fbbb1a5f90784b8765 GIT binary patch literal 127602 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%0A_Y}j?F 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 JVHE)Ie*j~a1H%9S literal 0 HcmV?d00001 diff --git a/plone/namedfile/tests/image.bmp b/plone/namedfile/tests/image.bmp new file mode 100644 index 0000000000000000000000000000000000000000..00494d53dbdb375d6bb6cfc5302976500dcdd77a GIT binary patch literal 5662 zcmeIuu?>JQ3upb2z literal 0 HcmV?d00001 diff --git a/plone/namedfile/tests/image_loseless.webp b/plone/namedfile/tests/image_loseless.webp new file mode 100644 index 0000000000000000000000000000000000000000..db5fcb166ee19cd5da9bf8047e9dc4e4de168361 GIT binary patch literal 48 zcmWIYbaT^SU|&lgW&A(I6&&U7( DQKb-m literal 0 HcmV?d00001 diff --git a/plone/namedfile/tests/image_lossy.webp b/plone/namedfile/tests/image_lossy.webp new file mode 100644 index 0000000000000000000000000000000000000000..ef78d2e6884d0b5152e3fa2f018064e945301e64 GIT binary patch literal 1496 zcmV;}1t=&Q`5o+V100~G%tB!;KA}xg?(YlbVQY{;)3dJJPx{$0=Ea;8Yg<_Ft z-AGm`7LC+}Vv%UwL`D)ptD0zqukdgT`lNVB6d5!ko&KaskP{pBIQ}kVLjCIjlOH5x zsk8U221sv0VuqFDL}aPE&Qu@OY{|~Rc{%R@Je>D`sS>0QL`VI)EL^8m4I)47V#h{( z^@$PhX;qo$eQanz0wUGNLI4pKt~w9^h_!LhfCNRWj)VXpvn-V#Y$)pjg1SmYY4Clg z;b?_AWeg>&k#=sr;8K>zQ>IYC{(Bs0Eu?p5jjM2xT6`aA`k{vuj2ZyhNS4Z|7pF|P zW52kpv_wos^R>8Wc}rvQV~V~BoZr(c3;n;n=@jV~8ug$5`~$jMhU6G8zKD4vT2GQi zFEnQSCZF*m8m;0Ku8P&%VzN+g(rx4q{twIm`X}9R!STP)s@6tz{6~tPVkhNFm0p1z zV(GMHax|g}c#IG=O7`LTA@t^hwvIlmyGAJ$=OE)0i8cwl`2eO1%^aAh0RH^4j{`Ob z)@%@PsJ9?pr$$O94Z7ArKK+tir$%1}Q0)Q{VV8#pwD%iz5C8xG0000002(7{U)O83 zXQ13M$~*xj*F+P(!H5IdEiV!SY0CYe+U;@cDoh*+Go0T9lVc;H1TufW@Yr{R~C*x1OYZlCb3 z^WWhjOK;zQqD1Fl6a*`r{U~kvT3weP_aK1*rRW*Kb9j^jlmOR_n7OJ}&7yRNRAI{^ z6yR&wyaxi6^4^BEzK6*IXUy6hgZixhLq7@Jwu;Bzm$Hhc&dOjDG_+35H^uc4rlD(; zyQNb;5&W&e1wa*ccw=j`oCKo_P1Jd)u`F20KBKz(^2%cP5Mbe)Iofld!ESnw&>xvh zy1~uF=fo=vPOk!l|J|a2UlobhNm~LHp3#fVY&7;y0q7&z$-D);_F~qK{>1ZLh~)+v z_=wrG050H(wD~vRND+F6+GhM$+dl9u5W0j}cS7Lmt2>#Mz?SSEz+Zh}ne#rn{ z!*|}Ye_Af*8<6-^#5t}^6Pe=hm5Z(a-%kfAp9#RGRfC*k70ayKk@&v0F>$jc;@oZ z;#un!?IF;-4rz9#{QMN!>#*SuYgI#+IUI6^!$Xi z{xwKFvpdf3V2Qge$`YxtXS=U#6Wv#;Lr#uZ5aImQR-*eom`kJJs{oh5^juKgcTP5E z&zu#tA2OsdD*@Tvi_C-#B>j3wNItClbi4nER;=Y9)948`UB@PA!Me@^He=AHoVA6h zQz{Hv$Gb`S7Z4sle1;QCJ81jLy`lY3skoZdiQAlgzQp1C#~a?FwAW|)b@6(=!ApbJ zLV)%pF}MJAtA>eEGt2RCqLXwrm&K!0m(8xrji@?{Y4r0002zMeU6M literal 0 HcmV?d00001 diff --git a/plone/namedfile/tests/test_storable.py b/plone/namedfile/tests/test_storable.py index 280c495..cafcaf8 100644 --- a/plone/namedfile/tests/test_storable.py +++ b/plone/namedfile/tests/test_storable.py @@ -25,7 +25,10 @@ from ZODB.blob import Blob from ZODB.blob import BlobFile +import io import os +import piexif +import PIL import tempfile import unittest @@ -153,7 +156,7 @@ def count_reads(self, size=-1): with patch.object(Blob, "open", count_open), patch.object( BlobFile, "read", count_reads ): - fi = NamedBlobImage(getFile("900_lossy.webp"), filename="900.webp") + fi = NamedBlobImage(getFile("900.webp"), filename="900.webp") self.assertEqual((900, 900), fi.getImageSize()) self.assertLess( read_bytes, @@ -163,3 +166,45 @@ def count_reads(self, size=-1): self.assertEqual( blob_read, 3, "blob opening for getsize, get_exif and getImageInfo only" ) + + def test_rorate(self): + # Create a 200x200 white image + img = PIL.Image.new("RGB", (100, 400), "white") + # Set the top-left pixels to black + img.putpixel((0, 0), (0, 0, 0)) + + # 270 degree rotation + # Create EXIF dict + exif_dict = {"0th": {}, "Exif": {}, "GPS": {}, "1st": {}, "thumbnail": None} + exif_dict["0th"][piexif.ImageIFD.Orientation] = 6 + exif_bytes = piexif.dump(exif_dict) + # Save image as JPEG with EXIF data + out = io.BytesIO() + img.save(out, format="JPEG", exif=exif_bytes) + fi_jpg = NamedBlobImage(out.getvalue(), filename="image.jpg") + img_jpg = PIL.Image.open(io.BytesIO(fi_jpg.data)) + self.assertEqual(fi_jpg.getImageSize(), (400, 100)) + self.assertEqual(img_jpg.getpixel((0, 0)), (255, 255, 255)) + # The pixel is not exactly black (RGB 0,0,0) due to quantization errors and + # compression artifacts introduced by the JPEG encoding process. + self.assertEqual(img_jpg.getpixel((399, 0)), (10, 10, 10)) + self.assertEqual(img_jpg.getpixel((0, 99)), (255, 255, 255)) + self.assertEqual(img_jpg.getpixel((399, 99)), (255, 255, 255)) + + # flip left to right + # Create EXIF dict + exif_dict = {"0th": {}, "Exif": {}, "GPS": {}, "1st": {}, "thumbnail": None} + exif_dict["0th"][piexif.ImageIFD.Orientation] = 2 + exif_bytes = piexif.dump(exif_dict) + # Save image as JPEG with EXIF data + out = io.BytesIO() + img.save(out, format="JPEG", exif=exif_bytes) + fi_jpg = NamedBlobImage(out.getvalue(), filename="image.jpg") + img_jpg = PIL.Image.open(io.BytesIO(fi_jpg.data)) + self.assertEqual(fi_jpg.getImageSize(), (100, 400)) + self.assertEqual(img_jpg.getpixel((0, 0)), (255, 255, 255)) + # The pixel is not exactly black (RGB 0,0,0) due to quantization errors and + # compression artifacts introduced by the JPEG encoding process. + self.assertEqual(img_jpg.getpixel((99, 0)), (8, 8, 8)) + self.assertEqual(img_jpg.getpixel((0, 399)), (255, 255, 255)) + self.assertEqual(img_jpg.getpixel((99, 399)), (255, 255, 255)) diff --git a/plone/namedfile/tests/test_utils.py b/plone/namedfile/tests/test_utils.py index 4ef9bff..b74f412 100644 --- a/plone/namedfile/tests/test_utils.py +++ b/plone/namedfile/tests/test_utils.py @@ -1,6 +1,7 @@ from plone.namedfile.file import NamedImage from plone.namedfile.tests import getFile from plone.namedfile.utils import get_contenttype +from plone.namedfile.utils import getImageInfo import unittest @@ -62,3 +63,29 @@ def test_get_contenttype(self): get_contenttype(filename="nothing.plonenamedfile"), "application/octet-stream", ) + + def test_get_image_info(self): + + # WEBP WP8 + self.assertEqual( + getImageInfo(getFile("image_lossy.webp")), + ("image/webp", 500, 200), + ) + + # WEBP WP8L + self.assertEqual( + getImageInfo(getFile("image_loseless.webp")), + ("image/webp", 200, 200), + ) + + # PNG + self.assertEqual( + getImageInfo(getFile("image.png")), + ("image/png", 200, 200), + ) + + # BMP3 + self.assertEqual( + getImageInfo(getFile("image.bmp")), + ("image/x-ms-bmp", 200, 200), + ) diff --git a/plone/namedfile/utils/__init__.py b/plone/namedfile/utils/__init__.py index 87f7a68..3702b74 100644 --- a/plone/namedfile/utils/__init__.py +++ b/plone/namedfile/utils/__init__.py @@ -203,22 +203,22 @@ def getImageInfo(data): content_type = "image/x-ms-bmp" width, height = struct.unpack(" 30 and data[:4] == b'RIFF' and data[8:12] == b'WEBP': + elif size > 30 and data[:4] == b"RIFF" and data[8:12] == b"WEBP": # handle WEBPs content_type = "image/webp" chunk_type = data[12:16] - if chunk_type == b'VP8 ': + if chunk_type == b"VP8 ": # WebP lossy (VP8): width and height are at offset 26–30 (2 bytes each, little endian) - width = int.from_bytes(data[26:28], 'little') & 0x3FFF - height = int.from_bytes(data[28:30], 'little') & 0x3FFF - elif chunk_type == b'VP8L': + width = int.from_bytes(data[26:28], "little") & 0x3FFF + height = int.from_bytes(data[28:30], "little") & 0x3FFF + elif chunk_type == b"VP8L": # WebP lossless (VP8L): dimensions are encoded in 4 bytes at offset 21–25 b = data[21:25] if len(b) >= 4: b0, b1, b2, b3 = b width = ((b1 & 0x3F) << 8 | b0) + 1 height = ((b3 & 0xF) << 10 | b2 << 2 | (b1 >> 6)) + 1 - elif chunk_type == b'VP8X': + elif chunk_type == b"VP8X": # Extended WebP (VP8X) # Width: bytes 24-26 (little endian, minus 1) # Height: bytes 27-29 (little endian, minus 1) @@ -226,8 +226,8 @@ def getImageInfo(data): height_bytes = data[27:30] if len(width_bytes) < 3 or len(height_bytes) < 3: return None - width = int.from_bytes(width_bytes, 'little') + 1 - height = int.from_bytes(height_bytes, 'little') + 1 + width = int.from_bytes(width_bytes, "little") + 1 + height = int.from_bytes(height_bytes, "little") + 1 else: # Not supported: could be animation, etc. pass From 6fb4dfa981a1657b2969fd68802dd03bb688e2b3 Mon Sep 17 00:00:00 2001 From: Mauro Amico Date: Sun, 27 Apr 2025 22:51:51 +0200 Subject: [PATCH 3/4] cleanup --- plone/namedfile/utils/__init__.py | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/plone/namedfile/utils/__init__.py b/plone/namedfile/utils/__init__.py index 3702b74..b240ed7 100644 --- a/plone/namedfile/utils/__init__.py +++ b/plone/namedfile/utils/__init__.py @@ -214,18 +214,15 @@ def getImageInfo(data): elif chunk_type == b"VP8L": # WebP lossless (VP8L): dimensions are encoded in 4 bytes at offset 21–25 b = data[21:25] - if len(b) >= 4: - b0, b1, b2, b3 = b - width = ((b1 & 0x3F) << 8 | b0) + 1 - height = ((b3 & 0xF) << 10 | b2 << 2 | (b1 >> 6)) + 1 + b0, b1, b2, b3 = b + width = ((b1 & 0x3F) << 8 | b0) + 1 + height = ((b3 & 0xF) << 10 | b2 << 2 | (b1 >> 6)) + 1 elif chunk_type == b"VP8X": # Extended WebP (VP8X) # Width: bytes 24-26 (little endian, minus 1) # Height: bytes 27-29 (little endian, minus 1) width_bytes = data[24:27] height_bytes = data[27:30] - if len(width_bytes) < 3 or len(height_bytes) < 3: - return None width = int.from_bytes(width_bytes, "little") + 1 height = int.from_bytes(height_bytes, "little") + 1 else: From baefac0953c057272c99a8dcf9e48897392b17e1 Mon Sep 17 00:00:00 2001 From: David Glick Date: Sat, 10 May 2025 18:53:32 -0700 Subject: [PATCH 4/4] Update plone/namedfile/tests/test_storable.py --- plone/namedfile/tests/test_storable.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plone/namedfile/tests/test_storable.py b/plone/namedfile/tests/test_storable.py index cafcaf8..f163083 100644 --- a/plone/namedfile/tests/test_storable.py +++ b/plone/namedfile/tests/test_storable.py @@ -167,7 +167,7 @@ def count_reads(self, size=-1): blob_read, 3, "blob opening for getsize, get_exif and getImageInfo only" ) - def test_rorate(self): + def test_rotate(self): # Create a 200x200 white image img = PIL.Image.new("RGB", (100, 400), "white") # Set the top-left pixels to black