手动设置Exif属性并在Python中维护图像的原始宽度和高度

时间:2017-10-13 00:40:10

标签: python image python-imaging-library exif pillow

当我在python中执行Image.open时,它有时会翻转图像的宽度和高度。经过一些研究(参见post的解释),似乎如果图像与Exif Orientation metadata相关联,那么这将导致尊重该属性的应用程序旋转它。

首先,我通过

测试我的图像的Exif属性
identify -verbose image.JPG | grep Orientation

它返回 6 ,这意味着图像具有属性,因此将被翻转。如果响应 1 ,则图片没有Exif Orientation metadata,因此不会翻转。由于我不想翻转图片,因此我尝试通过此post的建议手动设置Exif property

所以我尝试在我的代码中手动设置orientation.exif.primary.Orientation[0] = 1。像这样:

from PIL import Image
import pexif


orientation = pexif.JpegFile.fromFile('image.JPG')

print("BEFORE:")
print(orientation.exif.primary.Orientation[0])

orientation.exif.primary.Orientation[0] = 1

print("AFTER:")
print(orientation.exif.primary.Orientation[0])


img = Image.open('image.JPG')
print(img.size)

这可以在 AFTER 之后修正 1 然而,它实际上并没有在现实生活中将其设置为1,因为当我再次运行identify -verbose image.JPG | grep Orientation时,它仍然是显示 6 。那么我该如何解决这个问题并且没有翻转图像的宽度和高度呢?

1 个答案:

答案 0 :(得分:0)

我不赞成这一点。超级用户的post解决了我的问题。

修复:

import os
os.system("exiftool -Orientation=1 -n image.JPG")

这会将实际图像的方向设置为1.原始问题中的代码会更改我创建的图像对象的方向,而不是实际图像本身。