PHP - 检测图像是否已手动旋转,EXIF方向标志错误

时间:2016-01-25 17:02:41

标签: php image upload rotation exif

我遇到了一些图像旋转的奇怪问题。

最初我们遇到了一些用户将图片上传到我们网站上的问题,但他们出现了错误的方式。因此,我们想要实现一些代码来检查EXIF方向标志并在必要时旋转图像。

这是简化函数的样子:

function image_fix_orientation($filename) {

  $exif = exif_read_data($filename);

  if (!empty($exif['Orientation'])) {

    $image = imagecreatefromjpeg($filename);

    switch ($exif['Orientation']) {
      case 3:
        $image = imagerotate($image, 180, 0);
        break;

      case 6:
        $image = imagerotate($image, -90, 0);
        break;

      case 8:
        $image = imagerotate($image, 90, 0);
        break;
    }

    imagejpeg($image, $filename, 100);

  }

}

这似乎适用于设置了方向标志,旋转并导致原始问题的图像。

然而,奇怪的是我发现之前上传到我们服务器上的一些图像(我们保留了原始图像,EXIF数据完好无损),我们已经实现了上面的代码,它们似乎包含一个Orientation标志(比如'3') )但他们的原始图片是正确的方式。如果我将其中一个图像输入到我的新上传代码中,它会读取方向标记并旋转图像,但图像是正确的开始方式。

我相信用户可能在上传之前手动旋转了图像,但它仍然保留了Orientation标志值。例如,如果我在Paint中旋转图像,它似乎保持相同的Orientation值。下面是一个示例图像{{3}}(箭头指向图像的真正顶部),但它的Orientation标志值为3,因此在使用我的新上传代码时会旋转。

有没有办法检测用户是否已手动旋转?

由于

0 个答案:

没有答案