返回顶部
首页 > 资讯 > 后端开发 > Python >怎么用python获取到照片拍摄时的详细位置
  • 897
分享到

怎么用python获取到照片拍摄时的详细位置

Python 2023-05-19 13:05:07 897人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

一.引言我们的朋友给我们发来一张照片我们如何获取到她的位置呢?用手机拍照会带着GPS信息,原来没注意过这个,因此查看下并使用代码获取照片里的GPS信息查看图片文件属性1.读取照片信息,获取坐标ExifReadpython library t

    一.引言

    我们的朋友给我们发来一张照片我们如何获取到她的位置呢?

    用手机拍照会带着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获取到照片拍摄时的详细位置的详细内容,更多请关注编程网其它相关文章!

    --结束END--

    本文标题: 怎么用python获取到照片拍摄时的详细位置

    本文链接: https://lsjlt.com/news/213228.html(转载时请注明来源链接)

    有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

    猜你喜欢
    • 怎么用python获取到照片拍摄时的详细位置
      一.引言我们的朋友给我们发来一张照片我们如何获取到她的位置呢用手机拍照会带着GPS信息,原来没注意过这个,因此查看下并使用代码获取照片里的GPS信息查看图片文件属性1.读取照片信息,获取坐标ExifReadPython library to...
      99+
      2023-05-19
      Python
    • 如何用python获取到照片拍摄时的详细位置(附源码)
      目录一.引言1.读取照片信息,获取坐标2.通过baidu Map的API将GPS信息转换成地址。二.源码附上!!!注意事项总结一.引言 先看获取到的效果 拍摄时间:2021:12:1...
      99+
      2022-12-10
      python获取图片位置信息 python 读取图片坐标 python获取照片的地点
    • 利用Python实现获取照片位置信息
      目录引言一、exifread函数库安装exrfread库(PyCharm)什么是exifread函数库二、获取女朋友发来的照片(单身勿扰)三、具体代码实现四、经纬度转换引言 通过一张...
      99+
      2024-04-02
    • 云服务器怎么用摄像头拍照片的
      要使用云服务器上的摄像头来拍照片,您需要先安装相机应用程序。您可以在各大官方网站或者应用商店下载相机应用程序并根据以下步骤安装: 打开应用程序,进入主界面后,选择“设置”选项。 点击“摄像头”按钮。 点击“添加”按钮,选择想要使用的相机...
      99+
      2023-10-26
      摄像头 服务器 照片
    • Android 调用系统相机拍摄获取照片的两种方法实现实例
      Android 调用系统相机拍摄获取照片的两种方法实现实例 在我们Android开发中经常需要做这个一个功能,调用系统相机拍照,然后获取拍摄的照片。下面是我总结的两种方法获取拍...
      99+
      2022-06-06
      调用 方法 系统 相机 Android
    • Java解析照片拿到GPS位置数据的详细步骤
      目录1.前提条件2.代码环境Java代码逐步解析照片拿到GPS位置数据,附上步骤讲解,附上源代码和jar包依赖 1.前提条件 第一,检查你图片是否是高清原图;第二,检查你的图片是否来...
      99+
      2024-04-02
    • 如何利用Python获取鼠标的实时位置
      目录安装pyautogui鼠标操作样例Python获取鼠标实时位置具体实现结果展示总结使用Python的第三方库pyautogui,PyAutoGUI是一个纯Python的GUI自动...
      99+
      2024-04-02
    • 在微信小程序中获取用户位置的详细过程
      目录前言wx.getLocation腾讯位置服务总结前言 最近在学习微信小程序,在学习的过程中,有很多好玩的 API,经常点外卖的同学可能在小程序中遇到过,比如:某团、某了么都是有显...
      99+
      2022-11-13
      微信小程序获取用户位置信息 小程序如何获取用户位置 微信小程序位置信息授权
    • python怎么利用traceback获取详细的异常信息
      这篇文章主要介绍了python怎么利用traceback获取详细的异常信息,具有一定借鉴价值,需要的朋友可以参考下。下面就和我一起来看看吧。除了使用 sys.exc_info() 方法获取更多的异常信息之外,还可以使用 traceback ...
      99+
      2023-06-15
    • Python中怎么获取文件的详细信息
      本篇文章给大家分享的是有关Python中怎么获取文件的详细信息,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python文件时间time_of_last_access ...
      99+
      2023-06-17
    • 怎么用小程序api获取用户的地理位置
      今天小编给大家分享一下怎么用小程序api获取用户的地理位置的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。  API  为了让...
      99+
      2023-06-26
    • 使用R语言怎么获取指定位置的数据
      这期内容当中小编将会给大家带来有关使用R语言怎么获取指定位置的数据,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。R语言-获取指定位置的数据R中采用数据对象+[ , ]的方式获取对应位置的数据,根据填入索引...
      99+
      2023-06-14
    • 怎么使用sql monitor获取更加详细的执行计划
      这篇文章主要讲解了“怎么使用sql monitor获取更加详细的执行计划”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么使用sql monitor获取更加...
      99+
      2024-04-02
    • 怎么用Python修改一张图片的地理位置
      这篇文章主要介绍“怎么用Python修改一张图片的地理位置”,在日常操作中,相信很多人在怎么用Python修改一张图片的地理位置问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python修改一张图片的地...
      99+
      2023-06-16
    • 使用this.getClass().getResource()获取文件时遇到的坑怎么解决
      这篇文章主要介绍“使用this.getClass().getResource()获取文件时遇到的坑怎么解决”,在日常操作中,相信很多人在使用this.getClass().getResource()获取文件时遇到的坑怎么解决问题上存在疑惑,...
      99+
      2023-07-04
    • 怎么在python中利用切片获取非连续的序列
      这篇文章给大家介绍怎么在python中利用切片获取非连续的序列,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性和面向对象的脚本语言,其最初的设计...
      99+
      2023-06-14
    • 利用Python怎么在图片的指定位置添加水印
      利用Python怎么在图片的指定位置添加水印?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几...
      99+
      2023-06-06
    • javascript浏览器的滚动条位置发生变化时触发此事件使用什么函数,详细讲解
      这篇文章将为大家详细讲解有关javascript浏览器的滚动条位置发生变化时触发此事件使用什么函数,详细讲解,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Javascript 滚动事件 当浏览器的滚动条位...
      99+
      2024-04-02
    • 怎么用Python中的PyQt5制作一个获取网络实时数据NBA数据播报GUI功能
      这篇文章主要讲解了“怎么用Python中的PyQt5制作一个获取网络实时数据NBA数据播报GUI功能”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么用Python中的PyQt5制作一个获取...
      99+
      2023-06-20
    软考高级职称资格查询
    编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
    • 官方手机版

    • 微信公众号

    • 商务合作