imagemagick convert: how to tell if images need to be rotated?

别等时光非礼了梦想. 提交于 2021-01-01 04:40:35

问题


In my rails app, i let the user upload images to use as thumbnails for resources they've made. I do all the image processing with imagemagick's convert command: i convert to jpg, letterbox it to 800x600px and then make some smaller thumbnail versions of that.

This is all working fine. The problem is that some images that have come off my iPhone, for example, have the wrong orientation. My desktop seems to variously deal with this: when i see the tiny thumbnail for the image in the file chooser dialog, it's got the wrong orientation, but if I open it in the image viewing tool, it's got the correct orientation.

Presumably there's some header or metadata or something in the image file which tells the app that it needs to rotate the file? I think that I need to read this in before I do any other processing of the image, so that I can rotate the image (if necessary) before doing all the other stuff.

Can anyone tell me how I can do this, in bash on an Ubuntu server?

thanks, Max

EDIT: a bit of googling suggests that this is to to with EXIF headers...


回答1:


It's true that you will have to look for orientation value reading Exif metadata of Image. Using imagemagick you can get this value by

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

Exif Orientation values range from 1 to 8 and maps to orientation as below:

  • 1 = Horizontal (normal)
  • 2 = Mirror horizontal
  • 3 = Rotate 180
  • 4 = Mirror vertical
  • 5 = Mirror horizontal and rotate 270 CW
  • 6 = Rotate 90 CW
  • 7 = Mirror horizontal and rotate 90 CW
  • 8 = Rotate 270 CW

Thus, image would require orientation correction if this metadata tag returns with a non 1 value. If this tag returns with no value it can be assumed to be having normal orientation.

To correct orientation to normal you can use following command

convert -auto-orient <inputImagePath> <outputImagePath> 



回答2:


Try

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

This gives a number from 1 to 8. These numbers are documented here



来源:https://stackoverflow.com/questions/43253889/imagemagick-convert-how-to-tell-if-images-need-to-be-rotated

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!