【问题标题】:PHP getimagesize() mixes up width and heightPHP getimagesize() 混淆了宽度和高度
【发布时间】:2015-03-27 13:33:42
【问题描述】:

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

但是(PHP 版本 5.4.12)在 some .jpg 文件中,它会按原样获得高度和宽度,而在 some(使用 iPhone 拍摄)中交换它们,认为肖像照片实际上是风景。
它不仅发生在我的本地 Wampserver 上,还发生在远程服务器上(使用不同的 PHP 版本)。

有谁知道怎么弄

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

【问题讨论】:

  • 您如何处理 getimagesize 的结果?您总是会得到一个更大和更小的值(方形图像除外),并且应该相应地工作。向我们展示您的代码,这会导致问题
  • 我也有同样的问题。我有 PHP 5.5 的 Wamp。它看起来像是内置 PHP 解释中的错误。
  • 有人找到解决方案了吗?我有完全相同的问题
  • @EdwinKrause “你总是得到越来越小的值”是什么意思?第一个值应该始终是宽度

标签: php orientation getimagesize


【解决方案1】:

某些相机在文件本身的元数据部分中包含一个方向标签。这样设备本身每次都能以正确的方向显示它,而不管原始数据中图片的方向如何。

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

参考资料:

【讨论】:

  • 我们谈论的是宽度/高度而不是方向。没有?
  • 图像方向错误会导致宽度/高度混淆。
  • 感谢您的回复。我检查了图像 EXIF,但图像方向是 1,因此对我来说似乎没有错。
  • 非常感谢!当从我的手机拍摄照片时,getImageSize 会混合宽度和高度。当我在肖像模式下使用女儿手机中的照片时,它不会。所以我显示方向,我所有的照片都说“6”,她的照片都说“1”。我不确定这意味着什么,但现在我知道何时将值切换回来!
【解决方案2】:

函数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 及更高版本中已自动修复。

【讨论】:

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