在 EXIF 读取数据中访问 Thumbnail.MimeType 时出现问题
Issues accessing Thumbnail.MimeType in EXIF read data
我正在尝试读取 EXIF 读取数据的计算 headers 中的 MimeType,但似乎找不到它,相反,我的循环只是 var 转储,好像它找不到它但是通过 vardump,我可以看到 Thumbnail.MimeType 确实在计算的 headers 中,我可能只是试图错误地访问它,请参阅下面的代码,它接受图像上传然后上传到 s3 存储桶然后我使用存储桶图像 url 获得 headers。
$result = $s3->putObject([
'Bucket' => '*********',
'Key' => 'full/' . $file_name,
'SourceFile' => $temp_file_location,
'ACL' => 'public-read'
]);
$code = $result['@metadata']['statusCode'];
if ($code === 200) {
$path = "url";
}
$exif_headers = exif_read_data($path, 'EXIF');
$computed_headers = exif_read_data($path, 'COMPUTED');
//check if image has datetime original.
if (!empty($exif_headers['DateTimeOriginal'])) {
$exif_date = $exif_headers['DateTimeOriginal'];
echo $exif_date;
} else {
// if no date time original pull Thumbnail.MimeType.
if (!empty($computed_headers['Thumbnail.MimeType'])) {
$exif_mime_type = $computed_headers['Thumbnail.MimeType'];
echo $exif_mime_type;
} else { // var dump if Thumbnail.MimeType is empty.
var_dump($computed_headers);
}
}
任何帮助将不胜感激:),我觉得我只是错过了一些东西,因为我能够在 DateTimeOriginal 存在时毫无问题地提取它。 TIA
编辑:这里是 var 转储
array(21) {
["FileName"]=> string(67) "5dce8027494055dce756d6bce615ACDD56-0BF6-4754-
BA08-C5FD4E0C38EC.jpeg"
["FileDateTime"]=> int(0)
["FileSize"]=> int(1309255)
["FileType"]=> int(2)
["MimeType"]=> string(10) "image/jpeg"
["SectionsFound"]=> string(30) "ANY_TAG, IFD0, THUMBNAIL, EXIF"
["COMPUTED"]=> array(7) {
["html"]=> string(26) "width="3264" height="2448""
["Height"]=> int(2448)
["Width"]=> int(3264)
["IsColor"]=> int(1)
["ByteOrderMotorola"]=> int(1)
["Thumbnail.FileType"]=> int(2)
["Thumbnail.MimeType"]=> string(10) "image/jpeg" }
["Orientation"]=> int(1)
["XResolution"]=> string(4) "72/1"
["YResolution"]=> string(4) "72/1"
["ResolutionUnit"]=> int(2)
["YCbCrPositioning"]=> int(1)
["Exif_IFD_Pointer"]=> int(102)
["THUMBNAIL"]=> array(6) {
["Compression"]=> int(6)
["XResolution"]=> string(4) "72/1"
["YResolution"]=> string(4) "72/1"
["ResolutionUnit"]=> int(2)
["JPEGInterchangeFormat"]=> int(286)
["JPEGInterchangeFormatLength"]=> int(7063)
}
["ExifVersion"]=> string(4) "0221"
["ComponentsConfiguration"]=> string(4) ""
["FlashPixVersion"]=> string(4) "0100"
["ColorSpace"]=> int(1)
["ExifImageWidth"]=> int(3264)
["ExifImageLength"]=> int(2448)
["SceneCaptureType"]=> int(0)
}
如 PHP documentation 所述,函数调用中的第二个参数 exif_read_data() 表示需要出现在文件中以生成结果数组的部分列表(逗号分隔)。
这意味着函数调用不会 return 仅此部分作为结果!
按如下方式更改您的代码,它将起作用:
<?php
$result = $s3->putObject([
'Bucket' => '*********',
'Key' => 'full/' . $file_name,
'SourceFile' => $temp_file_location,
'ACL' => 'public-read'
]);
$code = $result['@metadata']['statusCode'];
if ($code === 200) {
$path = "url";
}
$exif_data = exif_read_data($path, 'EXIF');
$computed_data = $exif_data['COMPUTED'];
//check if image has datetime original.
if (!empty($exif_data['DateTimeOriginal'])) {
$exif_date = $exif_data['DateTimeOriginal'];
echo $exif_date;
} else {
// if no date time original pull Thumbnail.MimeType.
if (!empty($computed_data['Thumbnail.MimeType'])) {
$exif_mime_type = $computed_data['Thumbnail.MimeType'];
echo $exif_mime_type;
} else { // var dump if Thumbnail.MimeType is empty.
var_dump($computed_data);
}
}
?>
我正在尝试读取 EXIF 读取数据的计算 headers 中的 MimeType,但似乎找不到它,相反,我的循环只是 var 转储,好像它找不到它但是通过 vardump,我可以看到 Thumbnail.MimeType 确实在计算的 headers 中,我可能只是试图错误地访问它,请参阅下面的代码,它接受图像上传然后上传到 s3 存储桶然后我使用存储桶图像 url 获得 headers。
$result = $s3->putObject([
'Bucket' => '*********',
'Key' => 'full/' . $file_name,
'SourceFile' => $temp_file_location,
'ACL' => 'public-read'
]);
$code = $result['@metadata']['statusCode'];
if ($code === 200) {
$path = "url";
}
$exif_headers = exif_read_data($path, 'EXIF');
$computed_headers = exif_read_data($path, 'COMPUTED');
//check if image has datetime original.
if (!empty($exif_headers['DateTimeOriginal'])) {
$exif_date = $exif_headers['DateTimeOriginal'];
echo $exif_date;
} else {
// if no date time original pull Thumbnail.MimeType.
if (!empty($computed_headers['Thumbnail.MimeType'])) {
$exif_mime_type = $computed_headers['Thumbnail.MimeType'];
echo $exif_mime_type;
} else { // var dump if Thumbnail.MimeType is empty.
var_dump($computed_headers);
}
}
任何帮助将不胜感激:),我觉得我只是错过了一些东西,因为我能够在 DateTimeOriginal 存在时毫无问题地提取它。 TIA
编辑:这里是 var 转储
array(21) {
["FileName"]=> string(67) "5dce8027494055dce756d6bce615ACDD56-0BF6-4754-
BA08-C5FD4E0C38EC.jpeg"
["FileDateTime"]=> int(0)
["FileSize"]=> int(1309255)
["FileType"]=> int(2)
["MimeType"]=> string(10) "image/jpeg"
["SectionsFound"]=> string(30) "ANY_TAG, IFD0, THUMBNAIL, EXIF"
["COMPUTED"]=> array(7) {
["html"]=> string(26) "width="3264" height="2448""
["Height"]=> int(2448)
["Width"]=> int(3264)
["IsColor"]=> int(1)
["ByteOrderMotorola"]=> int(1)
["Thumbnail.FileType"]=> int(2)
["Thumbnail.MimeType"]=> string(10) "image/jpeg" }
["Orientation"]=> int(1)
["XResolution"]=> string(4) "72/1"
["YResolution"]=> string(4) "72/1"
["ResolutionUnit"]=> int(2)
["YCbCrPositioning"]=> int(1)
["Exif_IFD_Pointer"]=> int(102)
["THUMBNAIL"]=> array(6) {
["Compression"]=> int(6)
["XResolution"]=> string(4) "72/1"
["YResolution"]=> string(4) "72/1"
["ResolutionUnit"]=> int(2)
["JPEGInterchangeFormat"]=> int(286)
["JPEGInterchangeFormatLength"]=> int(7063)
}
["ExifVersion"]=> string(4) "0221"
["ComponentsConfiguration"]=> string(4) ""
["FlashPixVersion"]=> string(4) "0100"
["ColorSpace"]=> int(1)
["ExifImageWidth"]=> int(3264)
["ExifImageLength"]=> int(2448)
["SceneCaptureType"]=> int(0)
}
如 PHP documentation 所述,函数调用中的第二个参数 exif_read_data() 表示需要出现在文件中以生成结果数组的部分列表(逗号分隔)。
这意味着函数调用不会 return 仅此部分作为结果!
按如下方式更改您的代码,它将起作用:
<?php
$result = $s3->putObject([
'Bucket' => '*********',
'Key' => 'full/' . $file_name,
'SourceFile' => $temp_file_location,
'ACL' => 'public-read'
]);
$code = $result['@metadata']['statusCode'];
if ($code === 200) {
$path = "url";
}
$exif_data = exif_read_data($path, 'EXIF');
$computed_data = $exif_data['COMPUTED'];
//check if image has datetime original.
if (!empty($exif_data['DateTimeOriginal'])) {
$exif_date = $exif_data['DateTimeOriginal'];
echo $exif_date;
} else {
// if no date time original pull Thumbnail.MimeType.
if (!empty($computed_data['Thumbnail.MimeType'])) {
$exif_mime_type = $computed_data['Thumbnail.MimeType'];
echo $exif_mime_type;
} else { // var dump if Thumbnail.MimeType is empty.
var_dump($computed_data);
}
}
?>