使用 Imagick 从 Exif 数据中获取特定键值 / PHP
Get Specific Key Value From Exif Data Using Imagick / PHP
我将 Imagick 图片库与 PHP 一起使用,并希望存储上传图片的 EXIF 数据的宽度和高度值。我可以遍历数据以列出所有值,但我不知道如何提取特定的宽度和高度。使用数组位置是没有意义的,因为很明显图像都会有不同的 EXIF 数据,并且这些值不会总是在相同的数组位置?
// new Imagick instance for uploaded files (the $temp variable relates to a foreach loop that saves the uploaded images in temporary memory)
$image = new Imagick($temp);
/* Get the EXIF information */
$exifArray = $image->getImageProperties();
/* Loop trough the EXIF properties */
foreach ($exifArray as $name => $property)
{
echo "{$name} => {$property}<br />\n";
}
这会打印出 key/values,其中的一个例子是:
exif:FocalPlaneResolutionUnit => 3
exif:FocalPlaneXResolution => 49807360/32768
exif:FocalPlaneYResolution => 49807360/32768
exif:ImageLength => 876
exif:ImageWidth => 1313
exif:ISOSpeedRatings => 100
exif:Make => Canon
exif:MaxApertureValue => 3/1
exif:MeteringMode => 5
exif:Model => Canon EOS 6D
exif:Orientation => 1
如何定位特定的 属性 值,例如ImageWidth
。 Imagick 文档不是特别有用吗?
还有身高好像输出为ImageLength
,这也是迷惑?
好吧,您已经有了一个包含键的关联数组,所以请使用这些键 - 它们存在或不存在,但键将始终相同 - 因此您始终可以使用相同的文字:
$height = $exifArray['exif:ImageLength']?? 0;
$width = $exifArray['exif:ImageWidth']?? 0;
"ImageLength" is the correct name for that EXIF tag (official standard)。从历史上看,图片是(就像今天的位图一样)一行像素,在任意位置剪切以移动到下一行(显示)。有时宽度不均匀需要,因为它可以按照格式假定。这就是为什么“高度”是一个相当现代的术语,而 EXIF 早在 1995 年就发布了。
我将 Imagick 图片库与 PHP 一起使用,并希望存储上传图片的 EXIF 数据的宽度和高度值。我可以遍历数据以列出所有值,但我不知道如何提取特定的宽度和高度。使用数组位置是没有意义的,因为很明显图像都会有不同的 EXIF 数据,并且这些值不会总是在相同的数组位置?
// new Imagick instance for uploaded files (the $temp variable relates to a foreach loop that saves the uploaded images in temporary memory)
$image = new Imagick($temp);
/* Get the EXIF information */
$exifArray = $image->getImageProperties();
/* Loop trough the EXIF properties */
foreach ($exifArray as $name => $property)
{
echo "{$name} => {$property}<br />\n";
}
这会打印出 key/values,其中的一个例子是:
exif:FocalPlaneResolutionUnit => 3
exif:FocalPlaneXResolution => 49807360/32768
exif:FocalPlaneYResolution => 49807360/32768
exif:ImageLength => 876
exif:ImageWidth => 1313
exif:ISOSpeedRatings => 100
exif:Make => Canon
exif:MaxApertureValue => 3/1
exif:MeteringMode => 5
exif:Model => Canon EOS 6D
exif:Orientation => 1
如何定位特定的 属性 值,例如ImageWidth
。 Imagick 文档不是特别有用吗?
还有身高好像输出为ImageLength
,这也是迷惑?
好吧,您已经有了一个包含键的关联数组,所以请使用这些键 - 它们存在或不存在,但键将始终相同 - 因此您始终可以使用相同的文字:
$height = $exifArray['exif:ImageLength']?? 0;
$width = $exifArray['exif:ImageWidth']?? 0;
"ImageLength" is the correct name for that EXIF tag (official standard)。从历史上看,图片是(就像今天的位图一样)一行像素,在任意位置剪切以移动到下一行(显示)。有时宽度不均匀需要,因为它可以按照格式假定。这就是为什么“高度”是一个相当现代的术语,而 EXIF 早在 1995 年就发布了。