检测EXIF方向并使用ImageMagick旋转图像

佳能数码单反相机似乎以横向保存照片,并使用exif::orientation进行旋转。

问题: imagemagick如何使用Exif方向数据将图像重新保存到预期的方向,使其不再需要Exif数据以正确的方向显示?

你可以使用convert的auto-orient选项来做到这一点。

 convert your-image.jpg -auto-orient output.jpg 

PHP Imagick的方式是testing图像的方向,并相应地旋转/翻转图像:

 function autorotate(Imagick $image) { switch ($image->getImageOrientation()) { case Imagick::ORIENTATION_TOPLEFT: break; case Imagick::ORIENTATION_TOPRIGHT: $image->flopImage(); break; case Imagick::ORIENTATION_BOTTOMRIGHT: $image->rotateImage("#000", 180); break; case Imagick::ORIENTATION_BOTTOMLEFT: $image->flopImage(); $image->rotateImage("#000", 180); break; case Imagick::ORIENTATION_LEFTTOP: $image->flopImage(); $image->rotateImage("#000", -90); break; case Imagick::ORIENTATION_RIGHTTOP: $image->rotateImage("#000", 90); break; case Imagick::ORIENTATION_RIGHTBOTTOM: $image->flopImage(); $image->rotateImage("#000", 90); break; case Imagick::ORIENTATION_LEFTBOTTOM: $image->rotateImage("#000", -90); break; default: // Invalid orientation break; } $image->setImageOrientation(Imagick::ORIENTATION_TOPLEFT); return $image; } 

该函数可能会像这样使用:

 $img = new Imagick('/path/to/file'); autorotate($img); $img->stripImage(); // if you want to get rid of all EXIF data $img->writeImage();