diff --git a/src/img2pdf.py b/src/img2pdf.py index f89670b..25d5e4e 100755 --- a/src/img2pdf.py +++ b/src/img2pdf.py @@ -22,7 +22,7 @@ import sys import os import zlib import argparse -from PIL import Image, TiffImagePlugin, GifImagePlugin, ImageCms +from PIL import Image, TiffImagePlugin, GifImagePlugin, ImageCms, ExifTags if hasattr(GifImagePlugin, "LoadingStrategy"): # Pillow 9.0.0 started emitting all frames but the first as RGB instead of @@ -35,7 +35,6 @@ if hasattr(GifImagePlugin, "LoadingStrategy"): ) # TiffImagePlugin.DEBUG = True -from PIL.ExifTags import TAGS from datetime import datetime, timezone import jp2 from enum import Enum @@ -1372,41 +1371,42 @@ def get_imgmetadata( rotation = 0 if rotreq in (None, Rotation.auto, Rotation.ifvalid): - if hasattr(imgdata, "_getexif") and imgdata._getexif() is not None: - for tag, value in imgdata._getexif().items(): - if TAGS.get(tag, tag) == "Orientation": - # Detailed information on EXIF rotation tags: - # http://impulseadventure.com/photo/exif-orientation.html - if value == 1: - rotation = 0 - elif value == 6: - rotation = 90 - elif value == 3: - rotation = 180 - elif value == 8: - rotation = 270 - elif value in (2, 4, 5, 7): - if rotreq == Rotation.ifvalid: - logger.warning( - "Unsupported flipped rotation mode (%d): use " - "--rotation=ifvalid or " - "rotation=img2pdf.Rotation.ifvalid to ignore", - value, - ) - else: - raise ExifOrientationError( - "Unsupported flipped rotation mode (%d): use " - "--rotation=ifvalid or " - "rotation=img2pdf.Rotation.ifvalid to ignore" % value - ) - else: - if rotreq == Rotation.ifvalid: - logger.warning("Invalid rotation (%d)", value) - else: - raise ExifOrientationError( - "Invalid rotation (%d): use --rotation=ifvalid " - "or rotation=img2pdf.Rotation.ifvalid to ignore" % value - ) + exif_dict = imgdata.getexif() + o_key = ExifTags.Base.Orientation.value # 274 rsp. 0x112 + if exif_dict and o_key in exif_dict: + # Detailed information on EXIF rotation tags: + # http://impulseadventure.com/photo/exif-orientation.html + value = exif_dict[o_key] + if value == 1: + rotation = 0 + elif value == 6: + rotation = 90 + elif value == 3: + rotation = 180 + elif value == 8: + rotation = 270 + elif value in (2, 4, 5, 7): + if rotreq == Rotation.ifvalid: + logger.warning( + "Unsupported flipped rotation mode (%d): use " + "--rotation=ifvalid or " + "rotation=img2pdf.Rotation.ifvalid to ignore", + value, + ) + else: + raise ExifOrientationError( + "Unsupported flipped rotation mode (%d): use " + "--rotation=ifvalid or " + "rotation=img2pdf.Rotation.ifvalid to ignore" % value + ) + else: + if rotreq == Rotation.ifvalid: + logger.warning("Invalid rotation (%d)", value) + else: + raise ExifOrientationError( + "Invalid rotation (%d): use --rotation=ifvalid " + "or rotation=img2pdf.Rotation.ifvalid to ignore" % value + ) elif rotreq in (Rotation.none, Rotation["0"]): rotation = 0 elif rotreq == Rotation["90"]: