bash - imagemagick 转换 : how to tell if images need to be rotated?

标签 bash image rotation imagemagick imagemagick-convert

在我的 Rails 应用程序中,我让用户上传图像以用作他们制作的资源的缩略图。我使用 imagemagick 的转换命令进行所有图像处理:我转换为 jpg,将其信箱化为 800x600px,然后制作一些较小的缩略图版本。

一切正常。问题是,例如,从我的 iPhone 上取下的某些图像方向错误。我的桌面似乎以不同的方式处理这个问题:当我在文件选择器对话框中看到图像的小缩略图时,它的方向是错误的,但如果我在图像查看工具中打开它,它的方向是正确的。

大概有一些 header 或元数据或图像文件中的某些内容告诉应用它需要旋转文件?我认为我需要在对图像进行任何其他处理之前阅读此内容,以便我可以在执行所有其他操作之前旋转图像(如有必要)。

谁能告诉我如何在 Ubuntu 服务器上的 bash 中做到这一点?

谢谢,马克斯

编辑:一些谷歌搜索表明这是为了使用 EXIF header ...

最佳答案

的确,您必须通过读取图像的 Exif 元数据来寻找方向值。使用 imagemagick 你可以通过

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

Exif Orientation 值范围从 1 到 8,映射到方向如下:

  • 1 = 水平(正常)
  • 2 = 水平镜像
  • 3 = 旋转 180 度
  • 4 = 垂直镜像
  • 5 = 水平镜像并顺时针旋转 270 度
  • 6 = 顺时针旋转 90 度
  • 7 = 水平镜像并顺时针旋转 90 度
  • 8 = 顺时针旋转 270 度

因此,如果此元数据标签返回非 1 值,图像将需要方向校正。如果此标记没有返回任何值,则可以假定它具有正常方向。

要将方向更正为法线,您可以使用以下命令

convert -auto-orient <inputImagePath> <outputImagePath> 

关于bash - imagemagick 转换 : how to tell if images need to be rotated?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43253889/

相关文章:

bash - 使用 sed 在所有方程编号周围添加括号

linux - 将目录下所有文件的第5列除以3?

string - 在每行中添加连续的数字

php - 将图像路径存储到数据库中

java - 从图像中删除白色背景以与父背景融合

opencv - 两个 3D 点之间的 3D 旋转矩阵

windows - 为什么 Git Bash 不能运行我的可执行文件?

image - WP8 : Is there an easy way to scale and blur an BitmapImage for windows phone app?

iphone - 自定义相机旋转问题

ios - 使用自动布局时,iOS 8 上的旋转单元格高度会丢失