imagemagick convert:如何判断图像是否需要旋转?

3
在我的Rails应用程序中,我允许用户上传图像作为资源的缩略图。我使用ImageMagick的convert命令进行所有图像处理:我将其转换为jpg格式,将其裁剪为800x600像素,并制作一些更小的缩略图版本。
这一切都很好。问题在于,有些从我的iPhone等设备上拍摄的图像方向不正确。我的桌面似乎会处理这个问题:当我在文件选择对话框中看到图像的微小缩略图时,它的方向是错误的,但如果我在图像查看工具中打开它,则方向是正确的。
可能图像文件中有一些头文件、元数据或其他东西告诉应用程序需要旋转文件?我认为在对图像进行任何其他处理之前,我需要先读取这些内容,以便在进行所有其他操作之前旋转图像(如果需要)。
有人能告诉我如何在Ubuntu服务器上的bash中执行此操作吗?
谢谢,Max
编辑:一些搜索表明这与EXIF头有关...
2个回答

11

确实,如果要查找图像的Exif元数据中的方向值读取,则需要进行翻译。使用ImageMagick可以通过以下方式获取此值:

identify -format '%[exif:orientation]' <Path to Image> 
//or by using
identify -format '%[orientation]' <Path to Image>

Exif方向值的范围为1到8,对应以下方向:
  • 1 = 水平 (正常)
  • 2 = 水平翻转
  • 3 = 旋转180度
  • 4 = 垂直翻转
  • 5 = 水平翻转并顺时针旋转270度
  • 6 = 顺时针旋转90度
  • 7 = 水平翻转并顺时针旋转90度
  • 8 = 顺时针旋转270度
因此,如果此元数据标记以非1值返回,则需要对图像进行方向校正。如果此标记未返回任何值,则可以假定它具有正常方向。
要将方向更正为正常方向,您可以使用以下命令
convert -auto-orient <inputImagePath> <outputImagePath> 

啊,我不知道ImageMagick可以自动完成这个!这样可以省去很多麻烦,谢谢 :) - Max Williams
实际上,%orientation[exif:orientation] 在 Linux(很可能也在 OSX)上都可以使用。 - xenoid
是的,这两个都可以在Linux上工作,但是[exif:orientation]似乎在OSX上无法工作。 - t6nand

3

尝试执行以下命令:

identify -format "%f %[EXIF:Orientation]" <imagename>

该命令会返回1到8之间的数字。这些数字的详细说明可以在此处找到。


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