Ваше изображение может быть повернуто в тегах exif.
Некоторые мобильные телефоны и камеры «вращают» изображение при создании фотографии с помощью этого специального поля, а не вращают пиксельную матрицу изображения.
Итак, в умной программе просмотра вы увидите размеры изображения в том виде, в котором они должны быть с примененным поворотом exif, но PIL загрузит его «как есть» без использования тега поворота.
Итак, вы можете проверить, было ли изображение повернуто, а затем поменять местами ширину и высоту:
from PIL import Image, ExifTags
img = Image.open("xxx.jpg")
def get_image_size(img):
"""
The function return REAL size of image
"""
# Lets get exif information in a form of nice dict:
# It will be something like: {'ResolutionUnit': 2, 'Orientation': 6, 'YCbCrPositioning': 1}
exif = {
ExifTags.TAGS[k]: v
for k, v in img._getexif().items()
if k in ExifTags.TAGS
}
size = img.size
# If orientation is horizontal, lets swap width and height:
if exif.get("Orientation", 0) > 4:
size = (size[1], size[0])
return size
print(get_image_size(img))
Ориентировкой Exif является число 1-8, что означает РЕАЛЬНУЮ ориентацию изображения
Информацию об этом можно найти здесь: http://sylvana.net/jpegcrop/exif_orientation.html