From 573cf278f1ab50c670447a9d39d582ae9d13bd31 Mon Sep 17 00:00:00 2001 From: Andrew Murray Date: Tue, 1 Mar 2022 19:10:10 +1100 Subject: [PATCH] Reset size when seeking away from "Large Thumbnail" MPO frame --- Tests/test_file_mpo.py | 3 +++ src/PIL/MpoImagePlugin.py | 2 ++ 2 files changed, 5 insertions(+) diff --git a/Tests/test_file_mpo.py b/Tests/test_file_mpo.py index 0e59e4d56c3..0fa3b6382ec 100644 --- a/Tests/test_file_mpo.py +++ b/Tests/test_file_mpo.py @@ -85,6 +85,9 @@ def test_frame_size(): im.seek(1) assert im.size == (680, 480) + im.seek(0) + assert im.size == (640, 480) + def test_ignore_frame_size(): # Ignore the different size of the second frame diff --git a/src/PIL/MpoImagePlugin.py b/src/PIL/MpoImagePlugin.py index 7ccf27c420b..88c1bfcc540 100644 --- a/src/PIL/MpoImagePlugin.py +++ b/src/PIL/MpoImagePlugin.py @@ -46,6 +46,7 @@ def _open(self): self._after_jpeg_open() def _after_jpeg_open(self, mpheader=None): + self._initial_size = self.size self.mpinfo = mpheader if mpheader is not None else self._getmp() self.n_frames = self.mpinfo[0xB001] self.__mpoffsets = [ @@ -77,6 +78,7 @@ def seek(self, frame): segment = self.fp.read(2) if not segment: raise ValueError("No data found for frame") + self._size = self._initial_size if i16(segment) == 0xFFE1: # APP1 n = i16(self.fp.read(2)) - 2 self.info["exif"] = ImageFile._safe_read(self.fp, n)