|
24 | 24 | import struct |
25 | 25 |
|
26 | 26 | from . import ( |
27 | | - ExifTags, |
28 | 27 | Image, |
29 | | - ImageFile, |
30 | 28 | ImageSequence, |
31 | 29 | JpegImagePlugin, |
32 | 30 | TiffImagePlugin, |
33 | 31 | ) |
34 | | -from ._binary import i16be as i16 |
35 | 32 | from ._binary import o32le |
36 | 33 |
|
37 | 34 |
|
@@ -109,7 +106,6 @@ def _open(self): |
109 | 106 | self._after_jpeg_open() |
110 | 107 |
|
111 | 108 | def _after_jpeg_open(self, mpheader=None): |
112 | | - self._initial_size = self.size |
113 | 109 | self.mpinfo = mpheader if mpheader is not None else self._getmp() |
114 | 110 | self.n_frames = self.mpinfo[0xB001] |
115 | 111 | self.__mpoffsets = [ |
@@ -137,27 +133,20 @@ def seek(self, frame): |
137 | 133 | self.fp = self._fp |
138 | 134 | self.offset = self.__mpoffsets[frame] |
139 | 135 |
|
| 136 | + original_exif = self.info.get("exif") |
| 137 | + if "exif" in self.info: |
| 138 | + del self.info["exif"] |
| 139 | + |
140 | 140 | self.fp.seek(self.offset + 2) # skip SOI marker |
141 | | - segment = self.fp.read(2) |
142 | | - if not segment: |
| 141 | + if not self.fp.read(2): |
143 | 142 | msg = "No data found for frame" |
144 | 143 | raise ValueError(msg) |
145 | | - self._size = self._initial_size |
146 | | - if i16(segment) == 0xFFE1: # APP1 |
147 | | - n = i16(self.fp.read(2)) - 2 |
148 | | - self.info["exif"] = ImageFile._safe_read(self.fp, n) |
149 | | - self._reload_exif() |
150 | | - |
151 | | - mptype = self.mpinfo[0xB002][frame]["Attribute"]["MPType"] |
152 | | - if mptype.startswith("Large Thumbnail"): |
153 | | - exif = self.getexif().get_ifd(ExifTags.IFD.Exif) |
154 | | - if 40962 in exif and 40963 in exif: |
155 | | - self._size = (exif[40962], exif[40963]) |
156 | | - elif "exif" in self.info: |
157 | | - del self.info["exif"] |
| 144 | + self.fp.seek(self.offset) |
| 145 | + JpegImagePlugin.JpegImageFile._open(self) |
| 146 | + if self.info.get("exif") != original_exif: |
158 | 147 | self._reload_exif() |
159 | 148 |
|
160 | | - self.tile = [("jpeg", (0, 0) + self.size, self.offset, (self.mode, ""))] |
| 149 | + self.tile = [("jpeg", (0, 0) + self.size, self.offset, self.tile[0][-1])] |
161 | 150 | self.__frame = frame |
162 | 151 |
|
163 | 152 | def tell(self): |
|
0 commit comments