PIL图像大小返回宽度/高度相反

7
使用PIL确定图像的宽度和高度
在特定的图像上(幸运的是只有这一个 - 但仍然很烦人),从image.size返回的宽度/高度是相反的。 该图像:
http://storage.googleapis.com/cookila-533ebf752b9d1f7c1e8b4db3/IMG_0004.JPG 代码:
from PIL import Image
import urllib, cStringIO

file = cStringIO.StringIO(urllib.urlopen('http://storage.googleapis.com/cookila-533ebf752b9d1f7c1e8b4db3/IMG_0004.JPG').read())
im=Image.open(file)
print im.size

结果为 - (2592, 1936)
应该反过来。

@mhawke - 在你的浏览器中打开图像并找出问题... - Boaz
2个回答

10
这是因为这张图片与Exif Orientation 元数据相关联,会导致那些遵循该属性的应用程序进行旋转:
# identify -verbose IMG_0004.JPG | grep Orientation
  Orientation: RightTop
    exif:Orientation: 6

与普通图像相比:

# identify -verbose iceland_pano.jpg | grep Orientation
  Orientation: TopLeft
    exif:Orientation: 1

因此,图像尺寸实际上是横向的(比高度更宽),但在浏览器、图像查看器等显示时会被旋转。

谢谢@Lukas-那么你推荐什么(假设我想像浏览器/图像查看器一样行事)? - Boaz
嗯,很难说。幸运的是,我从来没有遇到过需要处理这种情况的情况。我可能会检查图像是否具有非常规方向,如果是,则将其标准化并将旋转应用于实际图像数据。 - Lukas Graf

2

A: 这是一个标准状态。

使用 OpenCV2 捕获的图像在经过 data.shape 处理后,与 Numpy 数组不同,而 PIL/Pillow 的 Image.size 也是如此。


可以进行审核和验证,例如 >>> Python Pillow v2.6.0 调色板 PNG (256) 如何添加 Alpha 通道?

print data.shape 返回 (1624, 3856)print im.size 返回 (3856, 1624)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接