【发布时间】:2012-02-08 00:37:02
【问题描述】:
我正在使用 PythonMagick 缩放和旋转一些 JPEG。理想情况下,我也可以更新 EXIF Orientation 标签。但是,虽然我可以检索此标签的值,但我似乎无法修改它。考虑:
from PythonMagick import Image
i = Image("image.jpg")
print i.attribute("EXIF:Orientation")
i.attribute("EXIF:Orientation", "5")
i.write("image-modified.jpg")
运行它会显示图像的原始方向:
exarkun@top:/tmp$ python broken.py
6
exarkun@top:/tmp$
只要不是从 5 开始,exiftool 就会证明新文件的方向没有调整:
exarkun@top:/tmp$ exiftool image.jpg | grep Orient
Orientation : Rotate 90 CW
exarkun@top:/tmp$ exiftool image-modified.jpg | grep Orient
Orientation : Rotate 90 CW
exarkun@top:/tmp$
为什么 ImageMagick 不写出修改后的方向?我怎样才能得到它?
【问题讨论】:
-
我自己编写成像代码,所以我对 imagemagick 或 pythonmagick 不熟悉,但你要求做的很简单。由于您没有添加或删除 EXIF 标记,您只是在原地更改它的值,那么为什么不将文件作为二进制读取,修改需要更改的单个字节并将其写回呢?有问题的标签 (0x112) 很容易用很少的代码找到。
-
我当然可以,但我希望我真的不需要解释为什么我会更喜欢找到一个具有高级 API 的库来处理这个问题。
-
我理解你的动机,如果我可以自己编写代码,我只是不喜欢使用额外的库/层,因为你总是会遇到干扰你的项目的限制或错误。
-
@Jean-PaulCalderone in
C这很容易做到:MagickSetImageOrientation(wand, TopLeftOrientation);(也许在这些绑定中有等效的东西)。现在,我建议使用其他东西来完成这项任务,因为如果您继续使用 ImageMagick,您将重新编码 jpeg。我看不出使用这个工具来完成这项任务有什么好处,为什么你会因为修改 EXIF 标签的简单操作而降低质量(轻微,是的)?
标签: python imagemagick jpeg exif pythonmagick