PHP getimageSize()混合了宽度和高度

2022-04-10 00:00:00 php orientation getimagesize

我使用一个上传图像的PHP脚本,然后使用PHP的getImageSize()获取尺寸,然后根据图片的方向(纵向或横向)对图像进行处理。

但是(PHP版本5.4.12)在某些.jpg文件上,它获取的高度和宽度是真实的,而在某些(用iPhone拍摄)中,它交换它们,认为肖像图片实际上是横向的。
它不仅发生在我本地的Wampserver上,而且还发生在远程服务器上(使用不同的PHP版本)。

有谁知道怎么做

1)修复或
2)找到解决问题的方法?


解决方案

某些摄像机在文件本身的元数据部分中包含方向标记。这样,无论原始数据中图片的方向如何,设备本身每次都可以以正确的方向显示图片。

Windows似乎不支持读取此方向标记,而只是读取像素数据并按原样显示。

解决方案是在每个图像的基础上更改受影响图片的元数据中的方向标签,或者

使用PHP的exif_read_data()函数读取方向并相应地调整图像方向,如下所示:

<?php
$image = imagecreatefromstring(file_get_contents($_FILES['image_upload']['tmp_name']));
$exif = exif_read_data($_FILES['image_upload']['tmp_name']);
if(!empty($exif['Orientation'])) {
    switch($exif['Orientation']) {
        case 8:
            $image = imagerotate($image,90,0);
            break;
        case 3:
            $image = imagerotate($image,180,0);
            break;
        case 6:
            $image = imagerotate($image,-90,0);
            break;
    }
}
// $image now contains a resource with the image oriented correctly
?>

引用:

  • https://stackoverflow.com/a/10601175/1124793(研究发生这种情况的原因)
  • http://php.net/manual/en/function.exif-read-data.php#110894(PHP代码)

相关文章