gps python获取图片坐标_Python解析照片EXIF信息并获取坐标位置

本文介绍了如何使用Python的exifread库解析图片的EXIF信息,提取GPS坐标,并通过百度地图API将其转换为具体地址。通过示例代码展示了整个过程,包括遇到的问题和解决方案。
摘要由CSDN通过智能技术生成

每张图片都包含EXIF信息,这是可交换图像文件的缩写,是为数码相机的照片专门设置的,可以记录数码照片的属性信息和拍摄数据. EXIF可以附加到JPEG,TIFF,RIFF等文件中,以添加与数码相机拍摄信息或图像处理软件的版本信息有关的内容和索引图. 总而言之,EXIF信息包含所拍摄照片的基本信息.

互联网上有许多EXIF信息查看器. 在这里,我上传了电影《我的故乡和我》的照片,我于10月1日去和朋友们一起观看. 没有标志建筑背景. 使用此工具进行尝试. 查看信息非常直观,例如拍照时间,手机型号,地理位置等,如下所示:

接下来,通过Python exifread库函数解析照片. 它可以解析图像的EXIF信息,然后依靠百度地图开放平台将GPS坐标信息转换为特定位置. 如果要获得理想的效果,则需要满足以下要求:

其他人通过选择原始图像来发送照片;

相机拍照时华为 去exif,默认设置为GPS定位;

图片尚未上传;

步骤1: 登录百度地图开放平台,进入控制台,在这里进行说明,百度地图开放平台的定位包括Web开发和Android开发

诸如iOS开发之类的不同服务最终将生成服务密钥(AK). 我们的Python调用基于服务密钥,因此创建的业务影响很小,因此无需查看开发文档即可轻松进行开发.

第2步: 创建一个应用程序,在这里我将应用程序类型选择为: 服务器(没有类型会影响下一步操作,关键是获取服务密钥).

操作现已完成,可以使用获取的服务密钥进行访问.

最后,扩展您的学习范围并查看开发文档,主要是针对不同终端设备的SDK文档. 有需要的小伙伴可以专注于学习.

仍然将照片用于测试.

分析代码如下:

import requests

import exifread

class GetPhotoInfo:

def __init__(self, photo):

self.photo = photo

# 百度地图ak 请替换为自己申请的ak

self.ak = 'nYPs4LQ9a4VhVxj55AD69K6zgsRy9o4z'

self.location = self.get_photo_info()

def get_photo_info(self, ):

with open(self.photo, 'rb') as f:

tags = exifread.process_file(f)

try:

# 打印照片其中一些信息

print('拍摄时间:', tags['EXIF DateTimeOriginal'])

print('照相机制造商:', tags['Image Make'])

print('照相机型号:', tags['Image Model'])

print('照片尺寸:', tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength'])

# 纬度

lat_ref = tags["GPS GPSLatitudeRef"].printable

lat = tags["GPS GPSLatitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")

lat = float(lat[0]) + float(lat[1]) / 60 + float(lat[2]) / float(lat[3]) / 3600

if lat_ref != "N":

lat = lat * (-1)

# 经度

lon_ref = tags["GPS GPSLongitudeRef"].printable

lon = tags["GPS GPSLongitude"].printable[1:-1].replace(" ", "").replace("/", ",").split(",")

lon = float(lon[0]) + float(lon[1]) / 60 + float(lon[2]) / float(lon[3]) / 3600

if lon_ref != "E":

lon = lon * (-1)

except KeyError:

return "ERROR:请确保照片包含经纬度等EXIF信息。"

else:

print("经纬度:", lat, lon)

return lat, lon

def get_location(self):

url = 'http://api.map.baidu.com/reverse_geocoding/v3/?ak={}&output=json' \

'&coordtype=wgs84ll&location={},{}'.format(self.ak, *self.location)

response = requests.get(url).json()

status = response['status']

if status == 0:

address = response['result']['formatted_address']

print('详细地址:', address)

else:

print('baidu_map error')

if __name__ == '__main__':

Main = GetPhotoInfo('im1.jpg')

Main.get_location()

虽然地理位置和实际电影位置之间存在一些偏差,但基本信息还是非常准确的华为 去exif,并且与对EXIF信息查看器的分析一致. 分析结果如下:

作者: 华为云开发人员不提供特殊的脱发程序猿

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/ruanjian/article-284701-1.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值