|
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