высота или ширина сначала в Python? - PullRequest
0 голосов
/ 31 октября 2018

Вот проблема, с которой я столкнулся:

У меня есть изображение с размерами 3024 x 4032, и обычно, просто взглянув на него, вы понимаете, что это вертикальное изображение, но это не по каким-то причинам. enter image description here

from PIL import Image

img = Image.open("xxx.jpg")
print(img.size)

Оказывается (4032 x 3024) в размерах, почему это так?

В большинстве случаев он печатается, как и ожидалось, где измерения имеют ширину в качестве первого аргумента (img.size[o]) и высоту в качестве второго аргумента (img.size[1]).

Похоже, ширина и высота не всегда находятся в правильном положении? Или я что-то пропустил?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Ваше изображение может быть повернуто в тегах 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

0 голосов
/ 31 октября 2018

Из Подушка документов для Image.size

Размер изображения в пикселях. Размер указан в виде 2-х кортежей (ширина, высота). Тип: (ширина, высота)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...