mirror of
				https://github.com/python-pillow/Pillow.git
				synced 2025-10-31 07:57:27 +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