如何使用PHP Imagick从EXIF数据中提取ImageWidth等指定属性值
问题解答
如何提取指定EXIF属性值
Imagick扩展提供了两种无需遍历的精准取值方式:
方法1:直接调用内置属性读取方法
使用Imagick::getImageProperty()方法可直接读取指定EXIF字段,所有EXIF字段的键名统一带exif:前缀:
$image = new Imagick($temp); // 读取宽度,属性不存在时返回默认值0 $imageWidth = $image->getImageProperty('exif:ImageWidth') ?: 0; // 读取高度,属性不存在时返回默认值0 $imageHeight = $image->getImageProperty('exif:ImageLength') ?: 0;
方法2:从已获取的EXIF数组中直接取值
你已经通过getImageProperties()拿到了完整EXIF数组,直接用带前缀的键名取值即可,推荐用null合并运算符做容错处理:
$exifArray = $image->getImageProperties(); $imageWidth = $exifArray['exif:ImageWidth'] ?? 0; $imageHeight = $exifArray['exif:ImageLength'] ?? 0;
为什么高度对应的字段是ImageLength
这是EXIF标准的统一命名规则,属于历史规范沿用:
EXIF协议制定时,将图片水平方向的像素数量定义为ImageWidth,垂直方向的像素行数量定义为ImageLength,所有符合EXIF标准的拍摄设备、处理工具都会遵循该命名规则存储图片高度。
注意:如果需要匹配用户实际看到的显示尺寸,建议同时读取
exif:Orientation字段,当该字段值为5/6/7/8时,说明图片存在旋转,需要将宽高值互换后使用。
内容的提问来源于stack exchange,提问作者pjk_ok
相关产品推荐
相关产品推荐

