【问题标题】:Detect EXIF Orientation and Rotate Image using ImageMagick使用 ImageMagick 检测 EXIF 方向和旋转图像
【发布时间】:2013-10-27 16:09:51
【问题描述】:

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

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

【问题讨论】:

标签: php imagemagick exif


【解决方案1】:

使用 ImageMagick 的 convertauto-orient 选项来执行此操作。

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

或者使用mogrify就地做

mogrify -auto-orient your-image.jpg

【讨论】:

  • 不要忘记,如果你想替换现有文件(就地),你可以使用mogrify而不是convert,这在你想要做一个完整的目录时很有用。
  • 似乎并非在所有情况下都有效。我至少有一个案例,GIMP 询问我是否要修复旋转,但 convert 只是让图像保持原样(将图片的真实上部留在右侧)。
  • 如果你喜欢 libvpsvips autorot your-image.jpg output.jpg 查看函数列表:libvips.github.io/libvips/API/current/…
【解决方案2】:

PHP Imagick 方法是测试图像方向并相应地旋转/翻转图像:

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);
}

函数可以这样使用:

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

【讨论】:

  • 此解决方案有效!我只尝试了 1 张图片,当然有 8 张,但我会让你知道它是怎么回事。对我来说,它是rotateImage,->rotate 只是中断
  • 谢谢,修复了 rotateImage 的问题。如果您想测试所有方向:有一个整洁的github repo,其中每个 exif 值都有一个图像。
  • 谢谢!在c#中工作。我只需要一点转换。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
  • 1970-01-01
  • 2016-07-13
  • 1970-01-01
  • 2016-04-12
  • 2012-11-15
  • 1970-01-01
相关资源
最近更新 更多