mirror of
https://github.com/python-pillow/Pillow.git
synced 2025-01-13 10:46:16 +03:00
Allow exif_transpose to work on Image instances as well as ImageFile
This commit is contained in:
parent
38fb9b1030
commit
8f0db65cd7
|
@ -240,22 +240,26 @@ class TestImageOps(PillowTestCase):
|
|||
for i in range(2, 9):
|
||||
im = Image.open("Tests/images/hopper_orientation_"+str(i)+ext)
|
||||
orientations.append(im)
|
||||
for im in orientations:
|
||||
if im is base_im:
|
||||
self.assertNotIn("exif", im.info)
|
||||
else:
|
||||
original_exif = im.info["exif"]
|
||||
transposed_im = ImageOps.exif_transpose(im)
|
||||
self.assert_image_similar(base_im, transposed_im, 17)
|
||||
if im is base_im:
|
||||
self.assertNotIn("exif", im.info)
|
||||
else:
|
||||
self.assertNotEqual(transposed_im.info["exif"], original_exif)
|
||||
for i, orientation_im in enumerate(orientations):
|
||||
for im in [
|
||||
orientation_im, # ImageFile
|
||||
orientation_im.copy() # Image
|
||||
]:
|
||||
if i == 0:
|
||||
self.assertNotIn("exif", im.info)
|
||||
else:
|
||||
original_exif = im.info["exif"]
|
||||
transposed_im = ImageOps.exif_transpose(im)
|
||||
self.assert_image_similar(base_im, transposed_im, 17)
|
||||
if i == 0:
|
||||
self.assertNotIn("exif", im.info)
|
||||
else:
|
||||
self.assertNotEqual(transposed_im.info["exif"], original_exif)
|
||||
|
||||
exif = ImageFile.Exif()
|
||||
exif.load(transposed_im.info["exif"])
|
||||
self.assertNotIn(0x0112, exif)
|
||||
exif = ImageFile.Exif()
|
||||
exif.load(transposed_im.info["exif"])
|
||||
self.assertNotIn(0x0112, exif)
|
||||
|
||||
# Repeat the operation, to test that it does not keep transposing
|
||||
transposed_im2 = ImageOps.exif_transpose(transposed_im)
|
||||
self.assert_image_equal(transposed_im2, transposed_im)
|
||||
# Repeat the operation, to test that it does not keep transposing
|
||||
transposed_im2 = ImageOps.exif_transpose(transposed_im)
|
||||
self.assert_image_equal(transposed_im2, transposed_im)
|
||||
|
|
|
@ -532,22 +532,22 @@ def exif_transpose(image):
|
|||
:param image: The image to transpose.
|
||||
:return: An image.
|
||||
"""
|
||||
if isinstance(image, ImageFile.ImageFile):
|
||||
exif = image.getexif()
|
||||
if exif:
|
||||
orientation = exif.get(0x0112)
|
||||
method = {
|
||||
2: Image.FLIP_LEFT_RIGHT,
|
||||
3: Image.ROTATE_180,
|
||||
4: Image.FLIP_TOP_BOTTOM,
|
||||
5: Image.TRANSPOSE,
|
||||
6: Image.ROTATE_270,
|
||||
7: Image.TRANSVERSE,
|
||||
8: Image.ROTATE_90
|
||||
}.get(orientation)
|
||||
if method is not None:
|
||||
transposed_image = image.transpose(method)
|
||||
del exif[0x0112]
|
||||
transposed_image.info["exif"] = exif.tobytes()
|
||||
return transposed_image
|
||||
if "exif" in image.info:
|
||||
exif = ImageFile.Exif()
|
||||
exif.load(image.info["exif"])
|
||||
orientation = exif.get(0x0112)
|
||||
method = {
|
||||
2: Image.FLIP_LEFT_RIGHT,
|
||||
3: Image.ROTATE_180,
|
||||
4: Image.FLIP_TOP_BOTTOM,
|
||||
5: Image.TRANSPOSE,
|
||||
6: Image.ROTATE_270,
|
||||
7: Image.TRANSVERSE,
|
||||
8: Image.ROTATE_90
|
||||
}.get(orientation)
|
||||
if method is not None:
|
||||
transposed_image = image.transpose(method)
|
||||
del exif[0x0112]
|
||||
transposed_image.info["exif"] = exif.tobytes()
|
||||
return transposed_image
|
||||
return image.copy()
|
||||
|
|
Loading…
Reference in New Issue
Block a user