我刚刚通过自制软件安装了composer,brew似乎安装了新版本的php(5.6.24)。 从那时起,使用exif_read_data提取其他元数据(模型,曝光,iso等),但不再从照片中提取“GPSLatitude”等GPS信息。

我通过exiftool(独立的非php程序)运行相同的照片,并且照片中确实存在GPS数据。

PHP是用exif编译的(因为有些信息被拉了),所以我很难理解为什么GPS数据不再被读取。

===============>>#1 票数:6 已采纳

这很可能是由于安全修复程序的回归导致ext / exif扩展在“未知”格式的情况下停止解析。

这应该在7.x分支(7.0.10和7.1.0 Beta 1)中修复,应该包含对它们的适当修复,虽然它没有合并到5.x分支,它可能会找到它的方式。

如果你想要一个补丁(应该很容易转换成5.x),那么我在这里提交了它: http//git.php.net/? p = php_src.git; a = commit; h = aabcb5481d9e717df77192dab2894468b9fc63b4

以下是关于ext / exif如何工作以及出错的一些背景知识:

在内部,当我们解析exif数据时,它将读出规范提供的标准exif标记,但是某些格式具有某些自定义标记。 这些通常也被解析,但是ext / exif是有限的,因为我们(仅在包括7.1的稳定分支中)支持具有扩展标记的6种格式(每种格式的列表被烘焙到扩展中)。 这是回归的来源。解析EXIF数据时,按以下顺序完成:

  • 标准EXIF数据
  • 查找用于解析自定义标记的已知格式,如果找到匹配的签名,则解析它们
  • 解析其他数据,如缩略图,GPS等

安全修复程序导致回归,因为您可以制作假签名并在内部绕过它,这可能导致无效读取。 如果在我们知道的格式的签名列表中签名不匹配,修复程序将保释解析,从而停止解析而不返回缩略图等数据,导致exif_t​​humbnail()基本上不能用于除6之外的任何其他格式。

当前在7.x分支中的修复,恢复此行为并继续解析这些附加标记,因此我们不直接支持的那些函数和其他格式将再次起作用。

除此之外,在7.2中,我一直在增加对三星,松下和DJI特定标签的支持,我现在也在研究索尼的具体数据。 我们在php.net上有一个错误报告,如果你有兴趣深入研究这个问题,那么它就会引发一切: https//bugs.php.net/bug.php?id = 72735 如果此补丁无法解决您的问题,我们非常欢迎您提交错误报告,以便我们可以考虑解决此问题。

我希望这对您有所帮助,并感谢您帮助PHP变得更大!

===============>>#2 票数:0

如果您有权访问服务器,则可以安装名为exiftool的Perl程序。 https://www.sno.phy.queensu.ca/~phil/exiftool/您可以将此软件放在服务器上的任何目录中。 我把它放在我的web目录的子目录中。

使用此脚本,如果exif_read_data不适用于您的PHP版本,则可以检索GPS数据。

function get_latlon($img){
  $path="/YOURIMAGES/";
  $path .= $img;
  exec("/directory_of_exiftool/exiftool -gpslatitude -gpslongitude -c \"%.6f\"  $path",$exifdata);
  $lat=$exifdata[0];$lat=str_ireplace("GPS Latitude","",$lat);$lat=str_ireplace("N","",$lat);$lat=trim(str_ireplace(":","",$lat));

  $lon=$exifdata[1];$lon=str_ireplace("GPS Longitude","",$lon);$lon=str_ireplace("E","",$lon);$lon=trim(str_ireplace(":","",$lon));

  if ($lat !=""){$location="$lat,$lon";}

  return $location;
}

  ask by John Brennan translate from so

未解决问题?本站智能推荐:

13回复

PHP提取GPS EXIF数据

我想用php从图片中提取GPS EXIF标签。 我正在使用exif_read_data()返回所有标签+数据的数组: 我不知道如何解释46/1 5403/100和0/1? 46可能是46°,但其余的尤其是0/1呢? 这个结构是关于什么的? 如何将它们转换为“标准”的(如
1回复

exif_read_data()函数不从图像中提取任何gps信息

我使用函数exif_read_data来提取表单jpg gps信息,这对所有图像都有效。 但是,我的客户有一个三星平板电脑和所有用这个完成的照片,我不能得到任何GPS信息。 例如在windows照片中我可以看到照片确实有gps信息。 为什么? 还有其他人有过这个问题吗? 照片在这里ht
2回复

将GPS exif数据写入Node中的图像

晚上好,社区。 我有一个关于使用node.js更改jpeg上的exif元数据的问题。 我有一组需要附加到图像文件的坐标,但是由于某些原因,我无法在npm上找到合适的库。 有很多提取库,例如exif,exif-js,no-exif等,但是所有库都从图像中检索数据。 我正朝相反的方向前进,并从kml文
1回复

PHP 7.2上的exif_read_data不会返回所有元数据

在PHP 7.2上,内置函数exif_read_data向PHP 7.1返回不同的信息。 这是我使用7.2时得到的: php -r 'var_export(exif_read_data("x.jpg", "ANY_TAG"));' 但是,当我在7.1上运行完全相同的代码时,我
1回复

将GPS数据写入没有原始GPS数据的简单图像文件中

-> C# 我想在图像中写入GPS数据(然后再读取),而其中没有GPS数据! 我知道这个问题在互联网上无处不在,但是他们并没有告诉您如何在包含EMPTY GPS信息的图像中专门进行书写。 如果您希望问我是否编写任何代码或尝试了我的自我,那么说实话,我从5天以来一直在尝试这
3回复

我想在Android图像中读取exif信息。 我可以从图库中的图像读取exif,但无法读取从相机拍摄的exif照片

如上图所示。我选择拍照exif信息为null。 我从电话选项中选择了图像,并且exif信息不为null。
1回复

无法读取相机胶卷图像的GPS坐标

在我正在开发的一个应用程序中,我正在从图像中检索EXIF数据。我想在iOS设备上获取图像的GPS坐标。当我获取由UIImagePickerControllerSourceTypeCamera拍摄的图像的GPS坐标时。但是当我尝试从图库中选择图像时它是由相机胶卷拍摄的,不会给我GPS坐标。
1回复

从exif_read_data不支持的图像格式读取元数据

我目前正在使用exif_read_data从JPG,JPEG,TIFF和TIF文件中加载信息。 有没有简单的方法可以手动读取其他图像(例如PNG,BMP,GIF)? 使用fread或类似的东西?
1回复

在php中读取exif数据时未定义的标签

我正在尝试使用php函数exif_read_data读取图像的EXIF数据,但是我返回一些UndefinedTag,这些标记是什么以及为什么它未定义 这是我使用的代码 它返回
4回复

在php中编写exif数据

我正在尝试创建一个网站,我可以在其中添加和修改JPEG文件中的元数据。 有没有办法可以用相当简单的方式编写exif数据。 我已经看过一两个例子,但它们太复杂了,无法在我给出的时间范围内掌握。 我知道IPTC,我知道元数据可以添加到JPEG文件中。 但这样做的正确方法是什么?