我遇到了一些图像旋转的奇怪问题。
最初我们遇到了一些用户将图片上传到我们网站上的问题,但他们出现了错误的方式。因此,我们想要实现一些代码来检查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,因此在使用我的新上传代码时会旋转。
有没有办法检测用户是否已手动旋转?
由于