【问题标题】:height or width first in Python?在Python中首先是高度还是宽度?
【发布时间】:2019-04-04 08:50:18
【问题描述】:

这是我遇到的问题:

我有一张尺寸为 3024 x 4032 的图像,通常只要看看它,你就知道它是垂直图像,但不是出于任何原因。

from PIL import Image

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

原来是 (4032 x 3024) 的尺寸,这是为什么呢?

在大多数情况下,它会按预期打印出来,其中维度的第一个参数是宽度(img.size[o]),第二个参数是高度( img.size[1])。

看起来宽度和高度并不总是在正确的位置?还是我错过了什么?

【问题讨论】:

  • 我认为首先是高度。一堆这些图像处理库/函数使用(通道数、高度、宽度)作为它们的图像输入格式。
  • @SilverSlash,我想真正的问题是,为什么它首先输出高度,而其他时候它首先输出宽度?

标签: python image python-imaging-library dimensions


【解决方案1】:

您的图片可能会在 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

【讨论】:

  • 老兄,你是对的!我已经测试了您的代码,它确实返回了真实的图像方向!哇!谢谢。
  • 另外,我已经更新了代码,因此,如果您的图像中没有设置“方向”标签,则不会出现“Null > 4”比较类型不一致的错误
【解决方案2】:

Pillow docsImage.size

图像大小,以像素为单位。大小以 2 元组(宽度,高度)的形式给出。 类型:(宽度,高度)

【讨论】:

  • 感谢您提供 Pillow 文档,这让我更加困惑,因为正如我所说,当我 xxx.size 时,很明显以相反的方式打印出来,所以首先是高度,然后是宽度。
  • 我没有看到任何令人困惑的地方。显然,这个 scrrenshot 来自相反的软件。还是总是先显示较小的数字?无论如何,您说您希望它是垂直的(即肖像模式),但事实并非如此。 Image.size 返回 (4032 x 3024),所以它显然是宽度>高度,即横向模式 - 正是你所拥有的。也许你应该先问问你的其他软件显示了什么。
  • @moomoochen 我猜到了!是电话!所以,看看我的回答:)
  • @MihanEntalpo:还是很奇怪。 OP 声称所有图像都是人像照片,但 Pillow 会“旋转”图像大小,使它们看起来像风景。如果这一切都是真的并且你的解释是正确的,Pillow 应该为所有 6 张图像返回相同的元组。
  • 我只是在等待@moomoochen 在文件上测试我的功能,然后发表评论,它是否有效:)
猜你喜欢
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-20
  • 1970-01-01
  • 1970-01-01
  • 2012-07-12
  • 1970-01-01
相关资源
最近更新 更多