最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何用python獲取到照片拍攝時的詳細位置(附源碼)

 更新時間:2022年12月10日 12:45:56   作者:上進小菜豬  
其實我們平時拍攝的照片里,隱藏了大量的信息,下面這篇文章主要給大家介紹了關于如何用python獲取到照片拍攝時的詳細位置,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

一.引言

先看獲取到的效果

拍攝時間:2021:12:18 16:22:13
照片拍攝地址:('內(nèi)蒙古自治區(qū)包頭市昆都侖區(qū)', '內(nèi)蒙古自治區(qū)', '包頭市', '昆都侖區(qū)', '多米幼兒園東南360米')

我們的女朋友給我們發(fā)來一張照片我們?nèi)绾潍@取到她的位置呢?

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

查看圖片文件屬性

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("經(jīng)度 =", contents[key],contents['GPS GPSLatitudeRef'])
        elif key =="GPS GPSLatitude":
            print("緯度 =",contents[key],contents['GPS GPSLongitudeRef'])
        #print(contents)
read()

運行

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

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

# 讀取照片的GPS經(jīng)緯度信息
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)
                        # 經(jīng)度
                        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信息轉(zhuǎn)換成地址。

眾所周知gps和百度的經(jīng)緯度會有誤差,那么我們需要調(diào)用百度轉(zhuǎn)換接口,這個百度目前沒有開源。

# 通過baidu Map的API將GPS信息轉(zhuǎn)換成地址。
def find_address_from_GPS(GPS):
        """
        使用Geocoding API把經(jīng)緯度坐標轉(zhuǎn)換為結(jié)構(gòu)化地址。
        :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

然后在主函數(shù)輸出:

二.源碼附上?。。?/h2>
# coding=utf-8
import exifread
import re
import json
import requests
import os


# 轉(zhuǎn)換經(jīng)緯度格式
def latitude_and_longitude_convert_to_decimal_system(*arg):
        """
        經(jīng)緯度轉(zhuǎn)為小數(shù), param arg:
        :return: 十進制小數(shù)
        """
        return float(arg[0]) + ((float(arg[1]) + (float(arg[2].split('/')[0]) / float(arg[2].split('/')[-1]) / 60)) / 60)


# 讀取照片的GPS經(jīng)緯度信息
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)
                        # 經(jīng)度
                        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信息轉(zhuǎn)換成地址。
def find_address_from_GPS(GPS):
        """
        使用Geocoding API把經(jīng)緯度坐標轉(zhuǎn)換為結(jié)構(gòu)化地址。
        :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里面發(fā)送原圖,信息都會完整的保留下來。

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

總結(jié)

到此這篇關于如何用python獲取到照片拍攝時的詳細位置的文章就介紹到這了,更多相關python獲取照片詳細位置內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • python將unicode和str互相轉(zhuǎn)化的實現(xiàn)

    python將unicode和str互相轉(zhuǎn)化的實現(xiàn)

    這篇文章主要介紹了python將unicode和str互相轉(zhuǎn)化的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • 利用Python如何將數(shù)據(jù)寫到CSV文件中

    利用Python如何將數(shù)據(jù)寫到CSV文件中

    在數(shù)據(jù)分析中經(jīng)常需要從csv格式的文件中存取數(shù)據(jù)以及將數(shù)據(jù)寫書到csv文件中。下面這篇文章主要給大家介紹了關于利用Python如何將數(shù)據(jù)寫到CSV文件中的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2018-06-06
  • Python環(huán)境下安裝使用異步任務隊列包Celery的基礎教程

    Python環(huán)境下安裝使用異步任務隊列包Celery的基礎教程

    這篇文章主要介紹了Python環(huán)境下安裝使用異步任務隊列包Celery的基礎教程,Celery的分布式任務管理適合用于服務器集群的管理和維護,需要的朋友可以參考下
    2016-05-05
  • pandas中read_excel()函數(shù)的基本使用

    pandas中read_excel()函數(shù)的基本使用

    在Python的數(shù)據(jù)處理庫pandas中,read_excel()函數(shù)是用于讀取Excel文件內(nèi)容的強大工具,本文就來介紹一下如何使用,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Python中append淺拷貝機制詳解

    Python中append淺拷貝機制詳解

    在 Python 中,對象賦值實際上是對象的引用。當創(chuàng)建一個對象,然后把它賦給另一個變量的時候,Python 并沒有拷貝這個對象,而只是拷貝了這個對象的引用,我們稱之為淺拷貝,這篇文章主要介紹了Python中append淺拷貝機制,需要的朋友可以參考下
    2023-02-02
  • Python圖形繪制操作之正弦曲線實現(xiàn)方法分析

    Python圖形繪制操作之正弦曲線實現(xiàn)方法分析

    這篇文章主要介紹了Python圖形繪制操作之正弦曲線實現(xiàn)方法,涉及Python使用numpy模塊數(shù)值運算及matplotlib.pyplot模塊進行圖形繪制的相關操作技巧,需要的朋友可以參考下
    2017-12-12
  • Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解

    Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解

    本文主要介紹了Numpy中扁平化函數(shù)ravel()和flatten()的區(qū)別詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • 基于Python構(gòu)建深度學習圖像分類模型

    基于Python構(gòu)建深度學習圖像分類模型

    在人工智能的浪潮中,圖像分類作為計算機視覺領域的基礎任務之一,一直備受關注,本文將介紹如何使用Python和PyTorch框架,構(gòu)建一個簡單的深度學習圖像分類模型,感興趣的可以了解下
    2024-12-12
  • Python生成器定義與簡單用法實例分析

    Python生成器定義與簡單用法實例分析

    這篇文章主要介紹了Python生成器定義與簡單用法,結(jié)合實例形式較為詳細的分析了Python生成器的概念、原理、使用方法及相關操作注意事項,需要的朋友可以參考下
    2018-04-04
  • Python實現(xiàn)partial改變方法默認參數(shù)

    Python實現(xiàn)partial改變方法默認參數(shù)

    這篇文章主要介紹了Python實現(xiàn)partial改變方法默認參數(shù),需要的朋友可以參考下
    2014-08-08

最新評論

永泰县| 宁化县| 崇文区| 堆龙德庆县| 东山县| 阜南县| 苏尼特左旗| 郁南县| 敦煌市| 永平县| 色达县| 兴仁县| 平阴县| 辽宁省| 奉节县| 莱阳市| 襄汾县| 綦江县| 河曲县| 盐边县| 连云港市| 凌源市| 武功县| 湖口县| 大连市| 吴江市| 德兴市| 新龙县| 镇安县| 宁城县| 宁阳县| 新蔡县| 志丹县| 镇沅| 宁化县| 康平县| 彭阳县| 甘孜县| 化德县| 洱源县| 宝山区|