Есть ли способ игнорировать данные ориентации EXIF ​​при загрузке изображения с помощью PIL? - PullRequest
0 голосов
/ 26 мая 2020

Я получаю нежелательный поворот при загрузке изображений с помощью PIL. Я загружаю образцы изображений и их двоичную маску, поэтому это вызывает проблемы. Я пытаюсь преобразовать код для использования вместо этого openCV, но это оказывается липким. Я не видел никаких аргументов в документации в Image.load (), но надеюсь, что есть обходной путь, который я просто не нашел ...

1 Ответ

1 голос
/ 26 мая 2020

Есть, но я еще не все написал. В основном, если вы загружаете изображение с набором полей EXIF ​​ «Ориентация» , вы можете получить этот параметр.

Во-первых, быстрый тест с использованием этого изображения из PIL Исходный код GitHub Pillow-7.1.2/Tests/images/hopper_orientation_6.jpg и запуск jhead, вы видите, что ориентация EXIF ​​равна 6:

jhead /Users/mark/StackOverflow/PillowBuild/Pillow-7.1.2/Tests/images/hopper_orientation_6.jpg
File name    : /Users/mark/StackOverflow/PillowBuild/Pillow-7.1.2/Tests/images/hopper_orientation_6.jpg
File size    : 4951 bytes
File date    : 2020:04:24 14:00:09
Resolution   : 128 x 128
Orientation  : rotate 90     <--- see here
JPEG Quality : 75

Теперь сделайте это в PIL:

from PIL import Image

# Load that image
im = Image.open('/Users/mark/StackOverflow/PillowBuild/Pillow-7.1.2/Tests/images/hopper_orientation_6.jpg')                         

# Get all EXIF data
e = im.getexif()

# Specifically get orientation
e.get(0x0112)                                                                                                                       
# prints 6

Теперь нажмите source , и вы можете определить, как ваше изображение было повернуто, и отменить его.


Или вы можете быть совершенно непрофессиональным ;-) и создать функцию с именем SneakilyRemoveOrientationWhileNooneIsLooking(filename) и оболочку out (подпроцесс) на exiftool и удалите ориентацию с помощью:

exiftool -Orientation=  image.jpg
...