mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-02-04 21:50:54 +03:00
commit
2c09252640
|
@ -827,7 +827,8 @@ def jpeg_factory(fp=None, filename=None):
|
||||||
if mpheader[45057] > 1:
|
if mpheader[45057] > 1:
|
||||||
# It's actually an MPO
|
# It's actually an MPO
|
||||||
from .MpoImagePlugin import MpoImageFile
|
from .MpoImagePlugin import MpoImageFile
|
||||||
im = MpoImageFile(fp, filename)
|
# Don't reload everything, just convert it.
|
||||||
|
im = MpoImageFile.adopt(im, mpheader)
|
||||||
except (TypeError, IndexError):
|
except (TypeError, IndexError):
|
||||||
# It is really a JPEG
|
# It is really a JPEG
|
||||||
pass
|
pass
|
||||||
|
|
|
@ -47,7 +47,10 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
|
||||||
def _open(self):
|
def _open(self):
|
||||||
self.fp.seek(0) # prep the fp in order to pass the JPEG test
|
self.fp.seek(0) # prep the fp in order to pass the JPEG test
|
||||||
JpegImagePlugin.JpegImageFile._open(self)
|
JpegImagePlugin.JpegImageFile._open(self)
|
||||||
self.mpinfo = self._getmp()
|
self._after_jpeg_open()
|
||||||
|
|
||||||
|
def _after_jpeg_open(self, mpheader=None):
|
||||||
|
self.mpinfo = mpheader if mpheader is not None else self._getmp()
|
||||||
self.__framecount = self.mpinfo[0xB001]
|
self.__framecount = self.mpinfo[0xB001]
|
||||||
self.__mpoffsets = [mpent['DataOffset'] + self.info['mpoffset']
|
self.__mpoffsets = [mpent['DataOffset'] + self.info['mpoffset']
|
||||||
for mpent in self.mpinfo[0xB002]]
|
for mpent in self.mpinfo[0xB002]]
|
||||||
|
@ -110,6 +113,22 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
|
||||||
finally:
|
finally:
|
||||||
self.__fp = None
|
self.__fp = None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def adopt(jpeg_instance, mpheader=None):
|
||||||
|
"""
|
||||||
|
Transform the instance of JpegImageFile into
|
||||||
|
an instance of MpoImageFile.
|
||||||
|
After the call, the JpegImageFile is extended
|
||||||
|
to be an MpoImageFile.
|
||||||
|
|
||||||
|
This is essentially useful when opening a JPEG
|
||||||
|
file that reveals itself as an MPO, to avoid
|
||||||
|
double call to _open.
|
||||||
|
"""
|
||||||
|
jpeg_instance.__class__ = MpoImageFile
|
||||||
|
jpeg_instance._after_jpeg_open(mpheader)
|
||||||
|
return jpeg_instance
|
||||||
|
|
||||||
|
|
||||||
# ---------------------------------------------------------------------
|
# ---------------------------------------------------------------------
|
||||||
# Registry stuff
|
# Registry stuff
|
||||||
|
|
Loading…
Reference in New Issue
Block a user