天天看點

Python 技術篇-擷取圖檔GPS資訊,鎖定追蹤圖檔拍攝地點、拍攝時間

我們需要 exifread 庫,這個就是用來提取 GPS 資訊的。直接 pip install exifread 來安裝就好了。

我用前段時間朋友在三亞拍的這個駱駝照片來做個示範,看看能不能定位到三亞。【用的是 iphone 手機拍攝的,其它的手機是否能提取出 GPS 資訊需要大家來試試】

注:如果圖檔被壓縮了的話會破壞裡面的二進制資訊,肯定就不能提取了哦!

如果程式運作報

KeyError: '緯度'

錯誤,可能就是這個原因,可以參照文章結尾的屬性檢視方法來判斷一下。
Python 技術篇-擷取圖檔GPS資訊,鎖定追蹤圖檔拍攝地點、拍攝時間

我們的原理就是: 先把圖檔以二進制的格式讀取出來,然後通過 exifread 庫把裡面的 GPS 資訊提取出來,再以特定的格式列印出來,最後直接複制裡面的經緯度資訊【地圖查詢需要把把緯度放前面,所有我就先把緯度打出來了】在支援通過經緯度來查位置的地圖裡一查就能定位到了。

具體代碼如下:

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)      

如圖所示,讀取後的緯經度資訊直接就顯示出來了。

Python 技術篇-擷取圖檔GPS資訊,鎖定追蹤圖檔拍攝地點、拍攝時間
然後在這個 GPSSPG 地圖裡搜出來就好了

可以看到地圖直接定位到了海南省三亞市。

Python 技術篇-擷取圖檔GPS資訊,鎖定追蹤圖檔拍攝地點、拍攝時間

拓展1: 後期我們可以通過百度提供的 API 接口直接把經緯度轉換為具體的地點。大家可以自己來嘗試一下,也可以等後期部落客的更新哦!

拓展2: 當然,你右鍵圖檔屬性的詳細資訊裡也有這些資訊。

如果想保密的話,直接點選删除屬性和個人資訊就能能把資訊删掉。

Python 技術篇-擷取圖檔GPS資訊,鎖定追蹤圖檔拍攝地點、拍攝時間

還有這些資訊是可以進行編輯的,可以用來欺騙對手,嘿嘿,具體怎麼玩你懂的!

我就把我圖檔的 iphone11 改成 iphone12 了。

Python 技術篇-擷取圖檔GPS資訊,鎖定追蹤圖檔拍攝地點、拍攝時間

喜歡的點個贊❤吧!