PHP图像旋转角度

PHP图像旋转角度,php,exif,Php,Exif,当方向为6或8时,我看到的使用EXIF方向值的PHP imagerotate的所有代码示例似乎都不起作用。在方向为6的情况下,我这样做是为了将图像顺时针翻转90度,这似乎应该是正确的,类似于我发现的示例: imagerotate($img,-90,0) 但我最终得到了一张颠倒的照片 任何我可能缺少的想法?另一种解决方案是使用Imagick的getImageOrientation和rotateimage来完成这项工作(请注意,您的服务器必须安装Imagick,大多数新服务器都有) 但如果是exif

当方向为6或8时,我看到的使用EXIF方向值的PHP imagerotate的所有代码示例似乎都不起作用。在方向为6的情况下,我这样做是为了将图像顺时针翻转90度,这似乎应该是正确的,类似于我发现的示例:
imagerotate($img,-90,0)
但我最终得到了一张颠倒的照片


任何我可能缺少的想法?

另一种解决方案是使用Imagick的getImageOrientation和rotateimage来完成这项工作(请注意,您的服务器必须安装Imagick,大多数新服务器都有)

但如果是exif数据问题(如StackSlave所述),则可能无法按预期工作

这是自动追踪功能:

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

另一个
解决方案是使用Imagick的getImageOrientation和rotateimage来完成这项工作(请注意,您的服务器必须安装Imagick,大多数新服务器都安装了它)

但如果是exif数据问题(如StackSlave所述),则可能无法按预期工作

这是自动追踪功能:

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

看起来像是exif数据问题。如果一开始它的方向是错误的,那么方向6或8可能没有任何意义。所以没有办法确定?看起来像是exif数据问题。如果一开始它的方向是错误的,那么方向6或8可能没有任何意义。所以没有办法确定?谢谢,我会尝试一下。但似乎如果最终成为exif数据问题,就没有真正的解决方案。任何关于进出口银行数据问题的链接以及可能的原因?与imagick的结果相同。那么一定是数据问题。(正如StackSlave所说-首先是错误的方向)。Ken感谢您的帮助,但有没有任何关于数据错误的线索?请尝试使用智能手机拍摄几张照片(尝试将智能手机旋转90度以拍摄横向和纵向照片,然后再次测试(通过您的代码或我的代码)。应该可以(除非您的智能手机出现问题,导致EXIF数据出现问题)。现在,如果您测试了自己的智能手机,并且一切正常,那么请联系向您发送这些照片的人,询问他/她的数码相机是否有问题。谢谢,我会尝试一下。但是,如果最终成为exif数据问题,则似乎没有真正的解决方案。有关exif数据问题的任何链接,以及什么可能会导致这样的结果?与imagick的结果相同。那么这一定是数据问题。(正如StackSlave所说,首先是方向错误)。Ken感谢您的帮助,但有任何关于数据错误原因的线索吗?请尝试使用智能手机拍几张照片(尝试将智能手机旋转90度以横向和纵向拍照,然后再次测试(通过您的代码或我的代码)。它应该可以工作(除非您的智能手机出现问题,这将导致EXIF数据中出现数据问题).现在,如果您测试了自己的智能手机,并且一切正常,那么请联系发送这些照片的人,询问他/她的数码相机是否有问题。
<?php
// File and rotation
$filename = 'test.jpg';
$degrees = 180;

// Content type
header('Content-type: image/jpeg');

// Load
$source = imagecreatefromjpeg($filename);

// Rotate
$rotate = imagerotate($source, $degrees, );

// Output
imagejpeg($rotate);

// Free the memory
imagedestroy($source);
imagedestroy($rotate);
?>