最近处理一些图片数据,遇到了 exif读取的问题。
很多同事推荐使用 PIL读取,都从网上拷贝一段不明所以的代码,搞得不清不楚。
鉴于我的 软件工程的思路,我将代码重新整理了一下,便于使用。
首先 PIL是有 ExifTags 模块的,不过里面只有2个字典:
明显解决不了 读取数据问题。
从一些 demo中得知,需要用 Image 对象的 _getexif函数获取 解析的结构体,代码如下
imgf = r'C:workspacedataSolarPanelest.jpg' from PIL import Image from pprint import pprint with Image.open(imgf) as im: pprint(im._getexif())
得到一堆数据:
从而得知,需要使用 ExifTags对 int值进行解释。
于是改造代码如下:
def sphere_to_decimal(degrees, minutes, seconds): '''将 (度,分,秒)经纬度转换为小数 ''' return degrees + minutes/60.0 + seconds/3600.0def _get_exif(im):'''提取 exif信息'''data = {}if not hasattr(im, '_getexif'):return dataexifinfo = im._getexif() #获取 exif信息if not exifinfo: #判空return data#遍历for tag, value in exifinfo.items():tag = TAGS.get(tag, tag)if tag == 'GPSInfo':#遍历 gps信息,进行 特殊处理gps = {}for _t, _v in value.items():_t = GPSTAGS.get(_t, _t)if _t in ["GPSLatitude