From 2aa4e85d84502b0088daae3a2656eed334fa8f2b Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Oct 2026 08:33:40 +1100 Subject: [PATCH 1/2] XResolution is not a tuple --- src/PIL/JpegImagePlugin.py | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index 0fcb17e0919..d719d69ddb7 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -520,11 +520,7 @@ def _read_dpi_from_exif(self) -> None: return try: exif = self.getexif() - x_resolution = exif[0x011A] - try: - dpi = float(x_resolution[0]) / x_resolution[1] - except TypeError: - dpi = x_resolution + dpi = exif[0x011A] if math.isnan(dpi): msg = "DPI is not a number" raise ValueError(msg) @@ -538,7 +534,6 @@ def _read_dpi_from_exif(self) -> None: SyntaxError, # invalid/unreadable EXIF TypeError, # dpi is an invalid float ValueError, # dpi is an invalid float - ZeroDivisionError, # invalid dpi rational value ): self.info["dpi"] = 72, 72 From ea021c0ce7a7da0f55a7b5269bd9758701e62270 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Fri, 30 Oct 2026 08:38:13 +1100 Subject: [PATCH 2/2] Simplify code --- src/PIL/JpegImagePlugin.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/PIL/JpegImagePlugin.py b/src/PIL/JpegImagePlugin.py index d719d69ddb7..530f65cc149 100644 --- a/src/PIL/JpegImagePlugin.py +++ b/src/PIL/JpegImagePlugin.py @@ -527,7 +527,6 @@ def _read_dpi_from_exif(self) -> None: if exif.get(0x0128) == 3: # ResolutionUnit is cm # 1 dpcm = 2.54 dpi dpi *= 2.54 - self.info["dpi"] = dpi, dpi except ( struct.error, # truncated EXIF KeyError, # dpi not included @@ -535,7 +534,8 @@ def _read_dpi_from_exif(self) -> None: TypeError, # dpi is an invalid float ValueError, # dpi is an invalid float ): - self.info["dpi"] = 72, 72 + dpi = 72 + self.info["dpi"] = dpi, dpi def _getmp(self) -> dict[int, Any] | None: return _getmp(self)