【问题标题】:PHP imagerotate anglePHP图像旋转角度
【发布时间】:2021-04-12 17:47:28
【问题描述】:

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

有什么我可能缺少的想法吗?

【问题讨论】:

  • 看起来像 exif 数据问题。如果一开始方向不对,那么方向 6 或 8 可能没有任何意义。
  • 所以没有办法确定?

标签: php exif


【解决方案1】:

alternative solution 是使用 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);
}
?> 

要使用它,您可以使用下面的代码(旋转后保存图像):

<?php

$image = new Imagick('./sourcepath/'.$upload1);
autoRotateImage($image);

// - Do other stuff to the image here -

$image->writeImage('./destinationpath/'. $upload1);
?>

如果您不保存旋转后的图像,您可以使用以下方式显示它(旋转后)

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

【讨论】:

  • 谢谢,我会试试的。但似乎如果最终成为 exif 数据问题,则没有真正的解决方案。任何指向有关 exif 数据问题以及可能导致该问题的信息的链接?
  • 那一定是数据问题。 (正如 StackSlave 所说 - 首先是错误的方向)。
  • Ken 感谢您的帮助,但有任何线索说明为什么数据开始错误?
  • 请尝试使用智能手机拍摄几张照片(尝试将智能手机旋转90度拍摄横向和纵向照片,然后再次测试(通过您的代码或我的代码)。应该工作(除非您的智能手机出现问题,这会导致 EXIF 数据出现数据问题)。现在,如果您测试了自己的智能手机并且一切正常,那么请联系给您发送这些照片的人,并询问他/她的数码相机是否有问题。
  • Ken,我用我的 iPhone 7 进行了测试,它看起来是正确的,还有其他发送给我的。我终于找到了问题所在。我使用 dropzone.js,它的大小调整功能是用 exif 数据保存照片。不知何故,即使 exif 数据是正确的,这也会使旋转“加倍”。如果其他人碰巧遇到同样的问题,stackoverlow 对我有帮助:stackoverflow.com/questions/62759821/…
猜你喜欢
  • 2012-07-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 2012-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多