gpt4 book ai didi

php - 使用 PHP 版本 5.2.9 提取 exif 2.3 的 exif 数据时出现问题

转载 作者:搜寻专家 更新时间:2023-10-31 21:15:21 28 4
gpt4 key购买 nike

PHP 版本 5.2.9

我想知道是否有人在使用 EXIF 2.3 的 PHP 的 exif_read_data() 提取 GPS 或什至只是提取所有 EXIF 数据时遇到问题(并可能找到解决方案)。我的公司最近购买了一台 Fujifilm Finepix XP150,它允许 GPS 方向数据,这对于我正在为我的公司构建的工具来说是必不可少的。

下面的代码是我用来提取的代码,我通过一次获取整个 EXIF 数据的列表,第二次为我提供经度和纬度。

$exif = exif_read_data('./images/DSCF0006.JPG', 'GPS');
echo $exif===false ? "<strong>No header data found.</strong><br />\n" : "<strong>Image contains headers</strong><br />\n";

$exif = exif_read_data('./images/DSCF0006.JPG', 0, true);
echo "<strong>IMG_20120329_104351.jpg:</strong><br />\n";
foreach ($exif as $key => $section) {
foreach ($section as $name => $val) {
echo "$key.$name: $val<br />\n";
}
}
$dir = "./images/";               

function readGPSinfoEXIF($image_full_name) {
$exif=exif_read_data($image_full_name, 0, true);
if(!$exif || $exif['GPS']['GPSLatitude'] == '') {
return false;
} else {
$lat_ref = $exif['GPS']['GPSLatitudeRef'];
echo "Lattitude Reference: ", $lat_ref, "<br />";
$lat = $exif['GPS']['GPSLatitude'];
list($num, $dec) = explode('/', $lat[0]);
$lat_s = $num / $dec;
list($num, $dec) = explode('/', $lat[1]);
$lat_m = $num / $dec;
list($num, $dec) = explode('/', $lat[2]);
$lat_v = $num / $dec;
$lon_ref = $exif['GPS']['GPSLongitudeRef'];
echo "Longitude Reference: ", $lon_ref, "<br />";
$lon = $exif['GPS']['GPSLongitude'];
list($num, $dec) = explode('/', $lon[0]);
$lon_s = $num / $dec;
list($num, $dec) = explode('/', $lon[1]);
$lon_m = $num / $dec;
list($num, $dec) = explode('/', $lon[2]);
$lon_v = $num / $dec;

$lat_int = ($lat_s + $lat_m / 60.0 + $lat_v / 3600.0);
// check orientation of latitude and prefix with (-) if S
$lat_int = ($lat_ref == "S") ? '-' . $lat_int : $lat_int;

$lon_int = ($lon_s + $lon_m / 60.0 + $lon_v / 3600.0);
// check orientation of longitude and prefix with (-) if W
$lon_int = ($lon_ref == "W") ? '-' . $lon_int : $lon_int;

$gps_int = array($lat_int, $lon_int);
return $gps_int;
}
}


function dirImages($dir) {
$d = dir($dir);
while (false!== ($file = $d->read())) {
$extension = substr($file, strrpos($file, '.'));
if($extension == ".JPG" || $extension == ".jpeg" || $extension == ".gif" | $extension == ".png") {
$images[$file] = $file;
}
$d->close();
return $images;
}

$array = dirImages('./images/');
$counter = 0;

foreach ($array as $key => $image) {
echo "<br />";
$counter++;
echo "<strong>".$counter."</strong>";
echo ": ";
$image_full_name = $dir."/".$key;
$image_name = $key;
echo "<strong>".$image_name."</strong>";
echo "<br />";
$results = readGPSinfoEXIF($image_full_name);
$latitude = $results[0];
echo $latitude;
echo ", ";
$longitude = $results[1];
echo $longitude;
echo "<br />";
}

使用我的 Samsung Galaxy Nexus 拍摄照片时,我得到了完美的结果,我得到了适当的 GPS 数据和所有 EXIF 数据,当使用相机时,我得到了 exif_read_data(DSCF0006.JPG) [exif_read_data]: corrupt EXIF header:达到最大目录嵌套级别

是我做错了什么还是 PHP 5 的 exif_read_data 还不支持 EXIF 2.3?我对此进行了研究,PHP.net 指出:

exif_read_data() also validates EXIF data tags according to the EXIF
specification (» http://exif.org/Exif2-2.PDF, page 20).

最佳答案

我的 Fujifilm 相机也有同样的问题,但我想我已经找到了解决方案,我在这里提出了一个 PHP 错误报告: https://bugs.php.net/bug.php?id=66443

如果您可以从源代码编译 PHP,请增加 exif.c 文件中的 MAX_IFD_NESTING_LEVEL 的值。我将它从 100 提高到 200,它似乎解决了问题。

关于php - 使用 PHP 版本 5.2.9 提取 exif 2.3 的 exif 数据时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10075066/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com