Python提取图片EXIF信息与GPS坐标转换详解
本文介绍如何使用Python的exifread库提取JPG等格式图片的EXIF信息,重点演示从原始数据中获取GPS经纬度及高度,并通过特定公式将度分秒格式转换为十进制坐标,最终输出完整的地理位置参数。
EXIF信息与图片格式支持
从照片文件中提取GPS定位数据。可交换图像文件格式(Exchangeable image file format,简称EXIF)是专为数码相机照片制定的标准,用于记录拍摄时的属性信息与原始数据。需要注意的是,该格式通常不支持PNG、WebP等非JPEG类图片格式。

Python环境配置与数据提取
在Python环境中,可通过安装ExifRead包来读取图片属性,安装命令如下:
pip install exifread
调用exifread.process_file函数即可获取图像包含的详细信息:
img_path = r"bei_012744.jpg"
f = open(img_path, 'rb')
contents = exifread.process_file(f)
f.close()通过单步调试查看contents变量,其内容结构如下:

GPS坐标转换逻辑与实现
接下来处理GPS坐标数据的转换逻辑:
利用exifread获取的经纬度原始数据通常呈现为列表形式,例如:纬度 [28, 56, 109097/5000],经度 [112, 38, 436353/10000]。具体的转换计算公式如下:
度 = 度 + 分/60 + 秒/3600 [28, 56, 109097/5000] = 28 + 56 / 60 + 109097/5000 / 3600 = 28.93939427777778
基于上述公式,实现坐标转换的代码如下:
def convert_gps(coord_arr):
arr = str(coord_arr).replace('[', '').replace(']', '').split(', ')
d = float(arr[0])
m = float(arr[1])
s = float(arr[2].split('/')[0]) / float(arr[2].split('/')[1])
return float(d) + (float(m) / 60) + (float(s) / 3600)完整代码示例与结果验证
完整的处理流程代码如下:
import exifread
img_path = r"bei_012744.jpg"
f = open(img_path, 'rb')
contents = exifread.process_file(f)
f.close()
lon = contents['GPS GPSLongitude'].printable # 经度
lon = convert_gps(lon)
lat = contents['GPS GPSLatitude'].printable # 纬度
lat = convert_gps(lat)
altitude = contents['GPS GPSAltitude'].printable # 相对高度
altitude = float(altitude.split('/')[0]) / float(altitude.split('/')[1])
print("GPSLongitude:", lon, "\nGPSLatitude:", lat, "\naltitude:", altitude)程序运行后的输出结果如下:
GPSLongitude: 112.64545425 GPSLatitude: 28.93939427777778 altitude: 58.009
以上就是关于利用Python读取图片属性信息的详细介绍,更多相关Python读取图片属性信息内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









