1.前序
有的照片是帶有GPS定位信息的,我們就是通過這個信息去通過高德定位圖片的拍攝地址
右鍵照片屬性-->查看詳細(xì)信息,我們可以看到照片的GPS定位信息。

image.png
2.
在寫代碼之前,我們還需要準(zhǔn)備調(diào)取高德地圖得KEY,通過該KEY去調(diào)用高德接口,解析經(jīng)緯度成我們所理解的地址信息。(具體如何創(chuàng)建調(diào)用KEY,可以參考我前幾篇對高德API接口使用示例)
此外,我們還需要借助Python的exifread模塊包功能讀取照片屬性

image.png
讀取照片屬性,獲取經(jīng)緯度,拍攝時間等。
# 利用exifread庫,讀取圖片的屬性
img_exif = exifread.process_file(open(self.img_path, 'rb'))
# 能夠讀取到屬性
if img_exif:
# 緯度數(shù)
latitude_gps = img_exif['GPS GPSLatitude']
# N,S 南北緯方向
latitude_direction = img_exif['GPS GPSLatitudeRef']
# 經(jīng)度數(shù)
longitude_gps = img_exif['GPS GPSLongitude']
# E,W 東西經(jīng)方向
longitude_direction = img_exif['GPS GPSLongitudeRef']
# 拍攝時間
take_time = img_exif['EXIF DateTimeOriginal']
我們需要關(guān)注能否拿到這幾個關(guān)鍵詞數(shù)據(jù)。
GPS GPSLatitude,GPS GPSLongitude,EXIF DateTimeOriginal
'GPS GPSLongitude': (0x0004) Ratio=[114, 7, 4813/100] @ 1900
'GPS GPSLatitude': (0x0002) Ratio=[22, 30, 811/100] @ 1876
根據(jù)圖片拿到的經(jīng)緯度,我們無法通過高德API確定位置,還需進(jìn)一步做數(shù)據(jù)處理。
if latitude_gps and longitude_gps and take_time:
# 對緯度、經(jīng)度值原始值作進(jìn)一步的處理
latitude = self.__format_lati_long_data(latitude_gps)
longitude = self.__format_lati_long_data(longitude_gps)
# print(f'{longitude},{latitude}')
# 注意:由于gps獲取的坐標(biāo)在國內(nèi)高德等主流地圖上逆編碼不夠精確,這里需要轉(zhuǎn)換為火星坐標(biāo)系
location = wgs84togcj02(longitude, latitude)
處理后的經(jīng)緯度
獲取到經(jīng)度、緯度是:114.13511208995212,22.49954944216219
獲取到經(jīng)緯度后,接下來就是要通過高德API轉(zhuǎn)換成我們能看懂的地址。(需要申請KEY),高德官網(wǎng)
resp = requests.get(self.url_get_position.format(self.api_key, location))
location_data = json.loads(resp.text)
address = location_data.get('regeocode').get('formatted_address')
return address
這時候我們就能知道這張照片拍攝時間及地址。

image.png
最后
微信和qq的照片在發(fā)送出來后,已經(jīng)對GPS信息做了屏蔽處理。所以大家現(xiàn)在不用太擔(dān)心自己的位置被獲取到。
更多源碼信息請參考原文