【问题标题】:PHP GetImageSize reverses Width/HeightPHP GetImageSize 反转宽度/高度
【发布时间】:2016-07-04 08:04:20
【问题描述】:

我在下面附上了带有这些细节的图片: 宽度:3024 像素 高度:4032px

getimagesize() 函数返回相反的结果:

$size = GetimageSize("test.jpg");
echo "image width: " . $size[0] . ", height: " . $size[1];

图像宽度:4032,高度:3024

这怎么可能?

您可以使用下面的图片自己尝试。

* 更新 * 从帖子中删除图像并添加指向 zip 文件(包含图像)的链接,因为图像在从堆栈溢出处理后工作正常。 Tinyupload ZIP

结果截图:

【问题讨论】:

  • 对我来说看起来不错。 i.imgur.com/rRFl9yh.png你确定图片没有旋转?
  • 感谢您的尝试。我担心堆栈溢出在这里发布后会进行一些图像处理。我会尝试发布一个从某个地方下载图像的链接,是的,我已经检查了图像 EXIF 并且方向是 1,因此应该没问题
  • 不过这只是我用 iPhone 6s 拍的人像照片。拍摄的任何照片似乎都有同样的问题
  • 啊,因为使用的是Exif数据,所以可以正确查看图片。 PHP 不会自动旋转图片,因此您需要先旋转它们,或者使用 PHP 读取 Exif 数据,然后根据它旋转图像。
  • @CharlotteDunois 您能否尝试使用 ZIP 文件中的图像?它不起作用,但如果我使用从堆栈溢出处理的图像(我已经用链接更新了问题)

标签: php image getimagesize


【解决方案1】:

您的图片在您查看时可能正在自动旋转。方向将在获得正确的高度和宽度方面发挥作用。此代码取自 php documentation 将确保您的图像正确旋转。链接中还有许多其他示例可供选择。

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

【讨论】:

  • 感谢您的回答。我已经检查了 EXIF 并且图像的方向是 1 因此您发布的功能不会对图像做任何事情。回到家后,我会发布一个下载原始图像的链接,以便您尝试使用它。
  • 我已经用有问题的图片的链接更新了问题。可以看到不需要旋转
【解决方案2】:

exif 方向标签不能完全信任,因为它实际上取决于设置标签的程序或设备是否使用正确的值。

这篇文章更好地解释了 exif 方向标签以及为什么它是一团糟。 http://www.daveperrett.com/articles/2012/07/28/exif-orientation-handling-is-a-ghetto/

【讨论】:

    【解决方案3】:

    函数getimagesize() 更改横向(水平)照片的宽度和高度。 您可以使用此代码:

    <?php
    $img = "test.jpg";
    $exif = exif_read_data($img);
    if(empty($exif['Orientation'])) {
        list($width, $height, $type, $attr) = getimagesize($img);
    }else{
        list($height, $width, $type, $attr) = getimagesize($img);
    }
    ?>
    

    但它在 PHP7 及更高版本中已自动修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-28
      • 2015-06-06
      • 1970-01-01
      • 2016-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-10-17
      • 1970-01-01
      相关资源
      最近更新 更多