在 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);
    }
}
?>