mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-11-04 01:47:47 +03:00 
			
		
		
		
	
						commit
						2c09252640
					
				| 
						 | 
				
			
			@ -827,7 +827,8 @@ def jpeg_factory(fp=None, filename=None):
 | 
			
		|||
        if mpheader[45057] > 1:
 | 
			
		||||
            # It's actually an MPO
 | 
			
		||||
            from .MpoImagePlugin import MpoImageFile
 | 
			
		||||
            im = MpoImageFile(fp, filename)
 | 
			
		||||
            # Don't reload everything, just convert it.
 | 
			
		||||
            im = MpoImageFile.adopt(im, mpheader)
 | 
			
		||||
    except (TypeError, IndexError):
 | 
			
		||||
        # It is really a JPEG
 | 
			
		||||
        pass
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -47,7 +47,10 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
 | 
			
		|||
    def _open(self):
 | 
			
		||||
        self.fp.seek(0)  # prep the fp in order to pass the JPEG test
 | 
			
		||||
        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.__mpoffsets = [mpent['DataOffset'] + self.info['mpoffset']
 | 
			
		||||
                            for mpent in self.mpinfo[0xB002]]
 | 
			
		||||
| 
						 | 
				
			
			@ -110,6 +113,22 @@ class MpoImageFile(JpegImagePlugin.JpegImageFile):
 | 
			
		|||
        finally:
 | 
			
		||||
            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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue
	
	Block a user