【问题标题】:PHP ImageMagick functions rotating phone images inexplicablyPHP ImageMagick 函数莫名其妙地旋转手机图像
【发布时间】:2022-01-02 01:55:11
【问题描述】:

我在 PHP 中使用这个对 imageMagick 的调用来水平合并多个图像

$combined_image = $images2merge->appendImages(false);

当我从笔记本电脑上传图像时,它的效果很好。但是当我用我的安卓手机浏览器进入同一个页面并使用相机拍照上传时,这个功能最终会垂直合并它们。

所以我试着用这个函数换掉它

$combined_image = $images2merge->montageImage($draw, '6×6+0+0', '+1+1', Imagick::MONTAGEMODE_UNFRAME, 0);

当我使用我的手机时,这确实会水平合并它们,但它会将它们逆时针旋转 90 度。同样,这与我从笔记本电脑上传时发生的情况不同,在这种情况下,它可以按预期工作。行为不一致的东西很难修复。

任何有关如何解决此问题的建议将不胜感激!

【问题讨论】:

  • 从任何智能手机拍摄照片后,请检查方向值并相应地旋转图像,然后再进行图像处理。详情请查看official_documenation
  • 哇,效果很好,谢谢你,摇滚!如果您将其作为官方答案,我会接受。
  • 谢谢兄弟。我已经发布了答案。

标签: php imagemagick


【解决方案1】:

从任何智能手机拍摄照片后,请检查方向值并相应地旋转图像,然后再进行进一步的图像处理。

所以你可以使用下面的 autoRotateImage 函数来处理自动旋转:

<?php

function autoRotateImage($image) {
    $orientation = $image->getImageOrientation();

    switch($orientation) {
        case imagick::ORIENTATION_BOTTOMRIGHT:
            $image->rotateimage("#000", 180); // rotate 180 degrees
        break;

        case imagick::ORIENTATION_RIGHTTOP:
            $image->rotateimage("#000", 90); // rotate 90 degrees CW
        break;

        case imagick::ORIENTATION_LEFTBOTTOM:
            $image->rotateimage("#000", -90); // rotate 90 degrees CCW
        break;
    }

    // Now that it's auto-rotated, make sure the EXIF data is correct in case the EXIF gets saved with the image!
    $image->setImageOrientation(imagick::ORIENTATION_TOPLEFT);
}
?>

例如:

<?php
$image = new Imagick('my-image-file.jpg');
autoRotateImage($image);
// - Do other stuff to the image here -
$image->writeImage('result-image.jpg');
?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-19
    • 1970-01-01
    • 2014-01-23
    • 2012-07-01
    相关资源
    最近更新 更多