Skip to content

Commit 3b92de5

Browse files
authored
Merge pull request #3588 from radarhere/mpo_frame_size
Change size of MPO image to match frame
2 parents ace5ba4 + a5b6285 commit 3b92de5

3 files changed

Lines changed: 25 additions & 1 deletion

File tree

117 KB
Binary file not shown.

Tests/test_file_mpo.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,15 @@ def test_exif(self):
5555
self.assertEqual(info[296], 2)
5656
self.assertEqual(info[34665], 188)
5757

58+
def test_frame_size(self):
59+
# This image has been hexedited to contain a different size
60+
# in the EXIF data of the second frame
61+
im = Image.open("Tests/images/sugarshack_frame_size.mpo")
62+
self.assertEqual(im.size, (640, 480))
63+
64+
im.seek(1)
65+
self.assertEqual(im.size, (680, 480))
66+
5867
def test_mp(self):
5968
for test_file in test_files:
6069
im = Image.open(test_file)

src/PIL/MpoImagePlugin.py

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
# See the README file for information on usage and redistribution.
1919
#
2020

21-
from . import Image, JpegImagePlugin
21+
from . import Image, ImageFile, JpegImagePlugin
22+
from ._binary import i16be as i16
2223

2324
# __version__ is deprecated and will be removed in a future version. Use
2425
# PIL.__version__ instead.
@@ -78,6 +79,20 @@ def seek(self, frame):
7879
return
7980
self.fp = self.__fp
8081
self.offset = self.__mpoffsets[frame]
82+
83+
self.fp.seek(self.offset + 2) # skip SOI marker
84+
if "parsed_exif" in self.info:
85+
del self.info["parsed_exif"]
86+
if i16(self.fp.read(2)) == 0xFFE1: # APP1
87+
n = i16(self.fp.read(2))-2
88+
self.info["exif"] = ImageFile._safe_read(self.fp, n)
89+
90+
exif = self._getexif()
91+
if 40962 in exif and 40963 in exif:
92+
self._size = (exif[40962], exif[40963])
93+
elif "exif" in self.info:
94+
del self.info["exif"]
95+
8196
self.tile = [
8297
("jpeg", (0, 0) + self.size, self.offset, (self.mode, ""))
8398
]

0 commit comments

Comments
 (0)