Merge branch 'master' of github.com:python-imaging/Pillow

This commit is contained in:
Alex Clark 2013-09-30 05:36:52 -04:00
commit c6b41f27a1
3 changed files with 59 additions and 43 deletions

View File

@ -224,6 +224,18 @@ _MODE_CONV = {
"RGBA": ('|u1', 4), "RGBA": ('|u1', 4),
"CMYK": ('|u1', 4), "CMYK": ('|u1', 4),
"YCbCr": ('|u1', 3), "YCbCr": ('|u1', 3),
"I;16": ('=u2', None),
"I;16B": ('>u2', None),
"I;16L": ('<u2', None),
"I;16S": ('=i2', None),
"I;16BS": ('>i2', None),
"I;16LS": ('<i2', None),
"I;32": ('=u4', None),
"I;32B": ('>u4', None),
"I;32L": ('<u4', None),
"I;32S": ('=i4', None),
"I;32BS": ('>i4', None),
"I;32LS": ('<i4', None),
} }
def _conv_type_shape(im): def _conv_type_shape(im):

View File

@ -359,51 +359,55 @@ class JpegImageFile(ImageFile.ImageFile):
self.tile = [] self.tile = []
def _getexif(self): def _getexif(self):
# Extract EXIF information. This method is highly experimental, return _getexif(self)
# and is likely to be replaced with something better in a future
# version.
from PIL import TiffImagePlugin def _getexif(self):
import io # Extract EXIF information. This method is highly experimental,
def fixup(value): # and is likely to be replaced with something better in a future
if len(value) == 1: # version.
return value[0] from PIL import TiffImagePlugin
return value import io
# The EXIF record consists of a TIFF file embedded in a JPEG def fixup(value):
# application marker (!). if len(value) == 1:
try: return value[0]
data = self.info["exif"] return value
except KeyError: # The EXIF record consists of a TIFF file embedded in a JPEG
return None # application marker (!).
file = io.BytesIO(data[6:]) try:
head = file.read(8) data = self.info["exif"]
exif = {} except KeyError:
# process dictionary return None
file = io.BytesIO(data[6:])
head = file.read(8)
exif = {}
# process dictionary
info = TiffImagePlugin.ImageFileDirectory(head)
info.load(file)
for key, value in info.items():
exif[key] = fixup(value)
# get exif extension
try:
file.seek(exif[0x8769])
except KeyError:
pass
else:
info = TiffImagePlugin.ImageFileDirectory(head) info = TiffImagePlugin.ImageFileDirectory(head)
info.load(file) info.load(file)
for key, value in info.items(): for key, value in info.items():
exif[key] = fixup(value) exif[key] = fixup(value)
# get exif extension # get gpsinfo extension
try: try:
file.seek(exif[0x8769]) file.seek(exif[0x8825])
except KeyError: except KeyError:
pass pass
else: else:
info = TiffImagePlugin.ImageFileDirectory(head) info = TiffImagePlugin.ImageFileDirectory(head)
info.load(file) info.load(file)
for key, value in info.items(): exif[0x8825] = gps = {}
exif[key] = fixup(value) for key, value in info.items():
# get gpsinfo extension gps[key] = fixup(value)
try: return exif
file.seek(exif[0x8825])
except KeyError:
pass
else:
info = TiffImagePlugin.ImageFileDirectory(head)
info.load(file)
exif[0x8825] = gps = {}
for key, value in info.items():
gps[key] = fixup(value)
return exif
# -------------------------------------------------------------------- # --------------------------------------------------------------------
# stuff to save JPEG files # stuff to save JPEG files

View File

@ -39,8 +39,8 @@ class WebPImageFile(ImageFile.ImageFile):
self.tile = [("raw", (0, 0) + self.size, 0, self.mode)] self.tile = [("raw", (0, 0) + self.size, 0, self.mode)]
def _getexif(self): def _getexif(self):
from PIL.JpegImagePlugin import JpegImageFile from PIL.JpegImagePlugin import _getexif
return JpegImageFile._getexif.im_func(self) return _getexif(self)
def _save(im, fp, filename): def _save(im, fp, filename):