亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么用python獲取到照片拍攝時的詳細位置

發布時間:2022-12-13 10:32:25 來源:億速云 閱讀:76 作者:iii 欄目:開發技術

本篇內容主要講解“怎么用python獲取到照片拍攝時的詳細位置”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“怎么用python獲取到照片拍攝時的詳細位置”吧!

    一.引言

    我們的朋友給我們發來一張照片我們如何獲取到她的位置呢?

    用手機拍照會帶著GPS信息,原來沒注意過這個,因此查看下并使用代碼獲取照片里的GPS信息

    查看圖片文件屬性

    怎么用python獲取到照片拍攝時的詳細位置

    1.讀取照片信息,獲取坐標

    ExifRead

    Python library to extract EXIF data from tiff and jpeg files.

    安裝

    pip install exifread

    讀取GPS

    import exifread
    import re
    
    def read():
        GPS = {}
        date = ''
        f = open("C:\\Users\\24190\\Desktop\\小朱學長.jpg",'rb')
        contents = exifread.process_file(f)
        for key in contents:
            if key == "GPS GPSLongitude":
                print("經度 =", contents[key],contents['GPS GPSLatitudeRef'])
            elif key =="GPS GPSLatitude":
                print("緯度 =",contents[key],contents['GPS GPSLongitudeRef'])
            #print(contents)
    read()

    運行

    怎么用python獲取到照片拍攝時的詳細位置

    我們得到了一個簡易的gps地址

    如果想要讀取全部的拍攝信息:

    # 讀取照片的GPS經緯度信息
    def find_GPS_image(pic_path):
            GPS = {}
            date = ''
            with open(pic_path, 'rb') as f:
                    tags = exifread.process_file(f)
                    for tag, value in tags.items():
                            # 緯度
                            if re.match('GPS GPSLatitudeRef', tag):
                                    GPS['GPSLatitudeRef'] = str(value)
                            # 經度
                            elif re.match('GPS GPSLongitudeRef', tag):
                                    GPS['GPSLongitudeRef'] = str(value)
                            # 海拔
                            elif re.match('GPS GPSAltitudeRef', tag):
                                    GPS['GPSAltitudeRef'] = str(value)
                            elif re.match('GPS GPSLatitude', tag):
                                    try:
                                            match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
                                            GPS['GPSLatitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
                                    except:
                                            deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
                                            GPS['GPSLatitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
                            elif re.match('GPS GPSLongitude', tag):
                                    try:
                                            match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
                                            GPS['GPSLongitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
                                    except:
                                            deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
                                            GPS['GPSLongitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
                            elif re.match('GPS GPSAltitude', tag):
                                    GPS['GPSAltitude'] = str(value)
                            elif re.match('.*Date.*', tag):
                                    date = str(value)
            return {'GPS_information': GPS, 'date_information': date}

    2.通過baidu Map的API將GPS信息轉換成地址。

    眾所周知gps和百度的經緯度會有誤差,那么我們需要調用百度轉換接口,這個百度目前沒有開源。

    # 通過baidu Map的API將GPS信息轉換成地址。
    def find_address_from_GPS(GPS):
            """
            使用Geocoding API把經緯度坐標轉換為結構化地址。
            :param GPS:
            :return:
            """
            secret_k ey = 'XXX'
            if not GPS['GPS_information']:
                    return '該照片無GPS信息'
            lat, lng = GPS['GPS_information']['GPSLatitude'], GPS['GPS_information']['GPSLongitude']
            baidu_map_api = "http://api.map.baidu.com/geocoder/v2/?ak={0}&callback=renderReverse&location={1},{2}s&output=json&pois=0".format(
                    secret_key, lat, lng)
            response = requests.get(baidu_map_api)
            content = response.text.replace("renderReverse&&renderReverse(", "")[:-1]
            print(content)
            baidu_map_address = json.loads(content)
            formatted_address = baidu_map_address["result"]["formatted_address"]
            province = baidu_map_address["result"]["addressComponent"]["province"]
            city = baidu_map_address["result"]["addressComponent"]["city"]
            district = baidu_map_address["result"]["addressComponent"]["district"]
            location = baidu_map_address["result"]["sematic_description"]
            return formatted_address, province, city, district, location

    然后在主函數輸出:

    怎么用python獲取到照片拍攝時的詳細位置

    二.源碼附上!!!

    # coding=utf-8
    import exifread
    import re
    import json
    import requests
    import os
    
    
    # 轉換經緯度格式
    def latitude_and_longitude_convert_to_decimal_system(*arg):
            """
            經緯度轉為小數, param arg:
            :return: 十進制小數
            """
            return float(arg[0]) + ((float(arg[1]) + (float(arg[2].split('/')[0]) / float(arg[2].split('/')[-1]) / 60)) / 60)
    
    
    # 讀取照片的GPS經緯度信息
    def find_GPS_image(pic_path):
            GPS = {}
            date = ''
            with open(pic_path, 'rb') as f:
                    tags = exifread.process_file(f)
                    for tag, value in tags.items():
                            # 緯度
                            if re.match('GPS GPSLatitudeRef', tag):
                                    GPS['GPSLatitudeRef'] = str(value)
                            # 經度
                            elif re.match('GPS GPSLongitudeRef', tag):
                                    GPS['GPSLongitudeRef'] = str(value)
                            # 海拔
                            elif re.match('GPS GPSAltitudeRef', tag):
                                    GPS['GPSAltitudeRef'] = str(value)
                            elif re.match('GPS GPSLatitude', tag):
                                    try:
                                            match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
                                            GPS['GPSLatitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
                                    except:
                                            deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
                                            GPS['GPSLatitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
                            elif re.match('GPS GPSLongitude', tag):
                                    try:
                                            match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
                                            GPS['GPSLongitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
                                    except:
                                            deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
                                            GPS['GPSLongitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
                            elif re.match('GPS GPSAltitude', tag):
                                    GPS['GPSAltitude'] = str(value)
                            elif re.match('.*Date.*', tag):
                                    date = str(value)
            return {'GPS_information': GPS, 'date_information': date}
    
    
    # 通過baidu Map的API將GPS信息轉換成地址。
    def find_address_from_GPS(GPS):
            """
            使用Geocoding API把經緯度坐標轉換為結構化地址。
            :param GPS:
            :return:
            """
            secret_ke y = 'zbLsuDDL4CS2U0M4KezOZZbGUY9iWtVf'
            if not GPS['GPS_information']:
                    return '該照片無GPS信息'
            lat, lng = GPS['GPS_information']['GPSLatitude'], GPS['GPS_information']['GPSLongitude']
            baidu_map_api = "http://api.map.baidu.com/geocoder/v2/?ak={0}&callback=renderReverse&location={1},{2}s&output=json&pois=0".format(
                    secret_key, lat, lng)
            response = requests.get(baidu_map_api)
            content = response.text.replace("renderReverse&&renderReverse(", "")[:-1]
            print(content)
            baidu_map_address = json.loads(content)
            formatted_address = baidu_map_address["result"]["formatted_address"]
            province = baidu_map_address["result"]["addressComponent"]["province"]
            city = baidu_map_address["result"]["addressComponent"]["city"]
            district = baidu_map_address["result"]["addressComponent"]["district"]
            location = baidu_map_address["result"]["sematic_description"]
            return formatted_address, province, city, district, location
    
    if __name__ == '__main__':
            GPS_info = find_GPS_image(pic_path='小朱學長.jpg')
            address = find_address_from_GPS(GPS=GPS_info)
            print("拍攝時間:" + GPS_info.get("date_information"))
            print('照片拍攝地址:' + str(address))

    注意事項

    1.照片的地址信息等,一般的手機相機默認是打開的。

    2.微信和QQ里面發送原圖,信息都會完整的保留下來。

    3.代碼里面需要處理在照片我放到了代碼的同文件夾下,所以沒有寫路徑,大家可以自己寫路徑,或者放到于代碼相同的路徑下即可。

    到此,相信大家對“怎么用python獲取到照片拍攝時的詳細位置”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    搜索| 屏东市| 包头市| 海阳市| 北川| 天全县| 宝丰县| 布尔津县| 星座| 龙陵县| 望江县| 闸北区| 新巴尔虎左旗| 花莲市| 建阳市| 凤山市| 巢湖市| 曲松县| 如东县| 日照市| 太仆寺旗| 平乡县| 枣阳市| 理塘县| 通海县| 张掖市| 武清区| 高清| 大姚县| 德州市| 宁波市| 丽江市| 荥经县| 盘山县| 麻栗坡县| 宝鸡市| 青岛市| 五原县| 偏关县| 宜宾县| 甘谷县|