Python 获取图片GPS等信息锁定图片拍摄地点、拍摄时间

2022-04-01 10:23:34 浏览数 (2)

我们需要 exifread 库,这个就是用来提取 GPS 信息的。直接 pip install exifread 来安装就好了。

我用前段时间朋友在三亚拍的这个骆驼照片来做个演示,看看能不能定位到三亚。【用的是 iphone 手机拍摄的,其它的手机是否能提取出 GPS 信息需要大家来试试】

注:如果图片被压缩了的话会破坏里面的二进制信息,肯定就不能提取了哦! 如果程序运行报 KeyError: '纬度' 错误,可能就是这个原因,可以参照文章结尾的属性查看方法来判断一下。

我们的原理就是: 先把图片以二进制的格式读取出来,然后通过 exifread 库把里面的 GPS 信息提取出来,再以特定的格式打印出来,最后直接复制里面的经纬度信息【地图查询需要把把纬度放前面,所有我就先把纬度打出来了】在支持通过经纬度来查位置的地图里一查就能定位到了。

具体代码如下:

代码语言:javascript复制
import exifread
import re

# 读取图片为二进制格式
f = open("luotuo.JPG","rb")
tags = exifread.process_file(f)

# GPS信息
GPS = {}

# 拍摄时间
Data = ""

for tag,value in tags.items():
    # 获取纬度信息
    if re.match('GPS GPSLatitude', tag):
        try:
            match_result=re.match('[(w*), (w*), (w.*)/(w.*)]', str(value)).groups()
            GPS['纬度'] = str(int(match_result[0]))   " "   str(int(match_result[1]))   " "   str(int(match_result[2])/int(match_result[3]))
        except:
            GPS['纬度'] = str(value)
    # 获取纬度信息
    elif re.match('GPS GPSLongitude', tag):
        try:
            match_result=re.match('[(w*), (w*), (w.*)/(w.*)]',str(value)).groups()
            GPS['经度'] = str(int(match_result[0]))   " "   str(int(match_result[1]))   " "   str(int(match_result[2])/int(match_result[3]))
        except:
            GPS['经度'] = str(value)
    # 获取高度
    elif re.match('GPS GPSAltitude', tag):
        GPS['高度'] = str(value)
    # 获取拍摄时间
    elif re.match('Image DateTime', tag):
        Data = str(value)

# 打印信息
print("纬 经 度:"   GPS['纬度']   ","   GPS['经度'])
print("拍摄时间:"   Data)

如图所示,读取后的纬经度信息直接就显示出来了。

然后在这个 GPSSPG 地图里搜出来就好了 可以看到地图直接定位到了海南省三亚市。

拓展1: 后期我们可以通过百度提供的 API 接口直接把经纬度转换为具体的地点。大家可以自己来尝试一下,也可以等后期博主的更新哦!

拓展2: 当然,你右键图片属性的详细信息里也有这些信息。 如果想保密的话,直接点击删除属性和个人信息就能能把信息删掉。

还有这些信息是可以进行编辑的,可以用来欺骗对手,嘿嘿,具体怎么玩你懂的! 我就把我图片的 iphone11 改成 iphone12 了。

0 人点赞