getimagesize返回分辨率大值在前,如何区分图像实际宽高
准确获取图片真实宽高的解决方案
宽高颠倒问题本质是图片携带了*EXIF方向(Orientation)*元数据导致的:getimagesize默认仅读取图片文件头存储的原始像素尺寸,不会根据EXIF中的旋转标识纠正宽高顺序,竖拍照片等存在旋转标识的资源就会出现返回值和实际观感宽高不符的情况。
解决思路
通过读取图片的EXIF方向参数,根据参数值判断是否需要交换宽高数值,即可得到真实的宽高:
- 首先调用
getimagesize获取原始像素宽高 - 再调用
exif_read_data读取图片的EXIF元数据,获取Orientation参数值 - 当Orientation值为5/6/7/8时,代表图片存在90度/270度旋转,此时交换原始宽高即为真实宽高
代码示例
// 可替换为本地图片路径或远程图片链接 $imageSource = '你的图片资源路径'; // 读取原始尺寸 $sizeInfo = getimagesize($imageSource); $originWidth = $sizeInfo[0]; $originHeight = $sizeInfo[1]; // 读取EXIF方向参数,加@避免无EXIF信息时抛出警告 $exifInfo = @exif_read_data($imageSource); $orientation = $exifInfo['Orientation'] ?? 1; // 纠正宽高 $realWidth = $originWidth; $realHeight = $originHeight; if (in_array($orientation, [5, 6, 7, 8])) { $realWidth = $originHeight; $realHeight = $originWidth; } // 输出结果 echo "真实宽度:{$realWidth},真实高度:{$realHeight}";
注意事项
如果读取远程图片失败,请检查PHP配置中
allow_url_fopen是否为开启状态;如果无法开启该配置,可先将远程图片下载到本地临时目录后再进行读取操作。
该方案仅对包含EXIF信息的JPG、TIFF等格式有效,PNG、WebP等默认不携带EXIF元数据的格式无需额外纠正。
内容的提问来源于stack exchange,提问作者Tanvir Ahmed
相关产品推荐
相关产品推荐

