diff --git a/Tests/test_imageops.py b/Tests/test_imageops.py index f6fddde60..3b3a63122 100644 --- a/Tests/test_imageops.py +++ b/Tests/test_imageops.py @@ -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) diff --git a/src/PIL/ImageOps.py b/src/PIL/ImageOps.py index 147f2821d..2cab10884 100644 --- a/src/PIL/ImageOps.py +++ b/src/PIL/ImageOps.py @@ -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()