![使用curl从图像中提取纬度/经度](https://linux22.com/image/95637/%E4%BD%BF%E7%94%A8curl%E4%BB%8E%E5%9B%BE%E5%83%8F%E4%B8%AD%E6%8F%90%E5%8F%96%E7%BA%AC%E5%BA%A6%2F%E7%BB%8F%E5%BA%A6.png)
curl -s -v -X HEAD http://sitename.com/123.jpg 2>&1 | grep '^< Last-Modified:'
给我一个约会。有什么方法可以检索图像的 GPS 坐标吗?还有其他元数据吗?
答案1
您得到的并不是照片拍摄的时间。这是123.jpg
文件最后修改(或创建/上传到服务器)的时间。该信息来自网络服务器,该服务器从文件的时间戳中获取该信息。这张照片很可能比你看到的要老 10 岁。其实,要让它看起来像来自未来,并不算太难!
您要查找的信息(可选)存储在图像的元数据中。从网络服务器的角度来看,这是文件实际内容的一部分,这意味着 HTTPHEAD
请求是不够的。首先,您需要下载该文件。让我们使用那张船的照片举个例子。
如果您运行curl
命令,您将看到该文件的最后修改时间是 2015 年 10 月 13 日。下载该文件后,该日期也将出现在文件的时间戳中(前提是您在下载时保留它们,我将其保存在文件时间戳中)。相信wget
确实如此)。
现在,一旦您获得了该文件,您所需要做的就是访问其元数据。在 Linux 上,我想说identify
和exiftool
是最受欢迎的选择。在你的情况下:
$ identify -format "%[EXIF:*GPS*]" image.jpg
$ exiftool -gpslatitude -gpslongitude image.jpg
请注意,您实际上不必将内容下载到实际文件中才能运行这些检查。您可以轻松地使用管道:
$ curl http://example.com/image.jpg | identify -format "%[EXIF:*GPS*]" -
$ curl http://example.com/image.jpg | exiftool -gpslatitude -gpslongitude -
但有一个重要的注意事项:地理标记不是一个系统的过程。并非所有图像都嵌入了 GPS 坐标。如果用于拍照的设备支持 GPS 并且实际上写入了 GPS 元数据,那么就可以了(智能手机可以做到这一点......)。否则,这两个命令将不会返回任何内容,在这种情况下,您必须更有创意确定位置...