正文

Python实现获取照片的地理定位信息

文章摘要

这篇文章介绍了一段Python代码,用于从JPEG图像中提取EXIF数据并解析GPS信息。代码分为两部分:`get_exif_data`函数用于提取JPEG图像的EXIF数据,包括GPS坐标信息;`get_gps_info`函数则从EXIF数据中进一步解析出经纬度(Latitude和Longitude)的具体值。文章的核心内容是展示如何利用PIL库和EXIF处理工具来实现图像数据的精确提取和解析。代码中使用了`PIL.Image`和`PIL.ExifTags`模块,展示了如何处理图像文件并将其EXIF标签转化为可解析的数值形式。文章末尾还提供了测试代码,用于验证该功能的正确性。

from PIL import Image from PIL.ExifTags import TAGS, GPSTAGS def get_exif_data(image_path): “”” 获取 JPEG 图像的 EXIF 数据 “”” exif_data={} with Image.open(image_path) as img: if hasattr(img, ‘_getexif’): # 获取所有 EXIF 标签 for tag, value in img._getexif().items(): if tag in TAGS: exif_data[TAGS[tag]]=value # 获取 GPSInfo 标签 if ‘GPSInfo’ in exif_data: # 解析 GPSInfo 标签中的子标签 gps_data={} for gps_tag in exif_data[‘GPSInfo’].keys(): tag_name=GPSTAGS.get(gps_tag, gps_tag) gps_data[tag_name]=exif_data[‘GPSInfo’][gps_tag] exif_data[‘GPSInfo’]=gps_data return exif_data def get_gps_info(exif_data): “”” 从 EXIF 数据中提取经纬度信息 “”” gps_info={} if ‘GPSInfo’ in exif_data: # 获取经度 lat=exif_data[‘GPSInfo’][‘GPSLatitude’] lat_ref=exif_data[‘GPSInfo’][‘GPSLatitudeRef’] # lat_degrees=lat[0][0] / float(lat[0][1]) lat_degrees=lat[0].numerator / float(lat[0].denominator) # lat_minutes=lat[1][0] / float(lat[1][1]) lat_minutes=lat[1].numerator / float(lat[1].denominator) # lat_seconds=lat[2][0] / float(lat[2][1]) lat_seconds=lat[2].numerator / float(lat[2].denominator) lat_direction=lat_ref gps_info[‘latitude’]=(lat_degrees + (lat_minutes / 60.0) + (lat_seconds / 3600.0)) * (-1 if lat_direction==’S’ else 1) # 获取纬度 lon=exif_data[‘GPSInfo’][‘GPSLongitude’] lon_ref=exif_data[‘GPSInfo’][‘GPSLongitudeRef’] # lon_degrees=lon[0][0] / float(lon[0][1]) lon_degrees=lon[0].numerator / float(lon[0].denominator) # lon_minutes=lon[1][0] / float(lon[1][1]) lon_minutes=lon[1].numerator / float(lon[1].denominator) # lon_seconds=lon[2][0] / float(lon[2][1]) lon_seconds=lon[2].numerator / float(lon[2].denominator) lon_direction=lon_ref gps_info[‘longitude’]=(lon_degrees + (lon_minutes / 60.0) + (lon_seconds / 3600.0)) * (-1 if lon_direction==’W’ else 1) return gps_info # 测试代码 if __name__==’__main__’: image_path=r’D:\spiderdocs\FtpServer\IMG_20230302_134126.jpg’ # 修改为你自己的 JPEG 图像路径 exif_data=get_exif_data(image_path) gps_info=get_gps_info(exif_data) print(‘经度:’, gps_info[‘longitude’]) print(‘纬度:’, gps_info[‘latitude’])