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');
?>
我在 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');
?>