PHP ImageMagick 功能旋转 phone 图像莫名其妙

PHP ImageMagick functions rotating phone images inexplicably

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

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

当我从我的笔记本电脑上传图片时效果很好。但是当我使用 android phone 浏览器进入同一页面并使用相机拍摄照片上传时,此功能最终将它们垂直合并。

所以我试着用这个功能换掉它

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

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

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

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

所以你可以使用下面的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');
?>