python获取照片EXIF信息(拍摄地址、拍摄时间、经纬度等)

您所在的位置:网站首页 怎么看图片时间定位 python获取照片EXIF信息(拍摄地址、拍摄时间、经纬度等)

python获取照片EXIF信息(拍摄地址、拍摄时间、经纬度等)

2024-06-25 09:09| 来源: 网络整理| 查看: 265

EXIF信息

可交换图像文件格式(英语:Exchangeable image file format,官方简称Exif),是专门为数码相机的照片设定的,可以记录数码照片的属性信息和拍摄数据。 这是从以前的相机遗留下来的,现在手机、相机都会有这个信息,这个信息包括光圈、曝光度、GPS信息、拍摄机器、拍摄时间等等。这个信息是相当详细了。只要是拍摄的照片都有这个信息,所以这个信息也是有泄露个人隐私的风险。在不法分子眼里,这就是有价值的信息啊,都是钱啊!

社交圈的图片有泄露信息的风险吗?

你能想到,那腾讯新浪这些大厂的大佬程序员也能想到的。所以呢,经过实测,微博里发的图片、朋友圈发的图片、QQ空间的图片、都是经过处理的,exif信息早就被抹除了。微信发的图片,不是发送的原图,那就也就被抹除了。一般,图片没有被经过二次处理,都是有exif信息的,没有经过处理的原图都是有exif信息的。总结一下,微信发送的原图是有exif信息;QQ发送的图片,有exif信息,其他未经过二次处理的图片也是有exif信息的。

exif信息展示

项目 信息(举例) 制造厂商 Canon 相机型号 Canon EOS-1Ds Mark III 图象方向 正常(upper-left) 图象分辨率X 300 图象分辨率Y 300 分辨率单位 dpi Software AdobePhotoshopCSMacintosh 最后异动时间 2005:10:06 12:53:19 YCbCrPositioning 2 曝光时间 0.00800 (1/125) sec 光圈值 F22 拍摄模式 光圈优先 ISO感光值 100 Exif信息版本 30,32,32,31 图象拍摄时间 2005:09:25 15:00:18 图象存入时间 2005:09:25 15:00:18 曝光补偿(EV±) 0 测光模式 点测光(Spot) 闪光灯 关闭 镜头实体焦长 12 mm Flashpix版本 30,31,30,30 图象色域空间 sRGB 图象尺寸X 5616pixel 图象尺寸Y 3744 pixel

这是百度百科的数据,当然这只是一部分,还有GPS定位,都会有展示的,所以还是挺重要的,要是手机拍摄,还有手机厂商、手机型号等信息。

python代码获取EXIF信息,还有GPS定位转换为地址的代码 import exifread import json import urllib.request f = open('1.jpg', 'rb') tags = exifread.process_file(f) print(tags) # 打印所有照片信息,会以键值对的方法保存 for tag in tags.keys(): print("Key: {0}, value {1}".format(tag, tags[tag])) # 打印照片其中一些信息 print('拍摄时间:', tags['EXIF DateTimeOriginal']) print('照相机制造商:', tags['Image Make']) print('照相机型号:', tags['Image Model']) print('照片尺寸:', tags['EXIF ExifImageWidth'], tags['EXIF ExifImageLength']) def getLatOrLng(refKey, tudeKey): """ 获取经度或纬度 """ if refKey not in tags: return None ref = tags[refKey].printable LatOrLng = tags[tudeKey].printable[1:-1].replace(" ", "").replace("/", ",").split(",") print(LatOrLng) LatOrLng = float(LatOrLng[0]) + float(LatOrLng[1]) / 60 + float(LatOrLng[2]) / 3600 if refKey == 'GPS GPSLatitudeRef' and tags[refKey].printable != "N": LatOrLng = LatOrLng * (-1) if refKey == 'GPS GPSLongitudeRef' and tags[refKey].printable != "E": LatOrLng = LatOrLng * (-1) return LatOrLng # 调用百度地图API通过经纬度获取位置 def getlocation(lat, lng): """ exif里面的经纬度是度分秒形式传入的,需要转换为小数形式,然后根据传入的经纬度,调用百度接口去查询详细地址 """ url = "http://api.map.baidu.com/reverse_geocoding/v3/?ak=百度API的AK信息,需要自己去申请&output=json&coordtype=wgs84ll&language_auto=1&extensions_town=true&location=" + lat + "," + lng req = urllib.request.urlopen(url) res = req.read().decode("utf-8") print(res) str1 = json.loads(res) jsonResult = str1.get('result') formatted_address = jsonResult.get('formatted_address') return formatted_address lat = getLatOrLng('GPS GPSLatitudeRef', 'GPS GPSLatitude') # 纬度 lng = getLatOrLng('GPS GPSLongitudeRef', 'GPS GPSLongitude') # 经度 print('纬度:{0} 经度:{1}'.format(lat, lng)) location = getlocation(str(lat), str(lng)) print('位置:{0}'.format(location)) 最后声明

如果有不合适的地方,请指正。代码有参考LLand520博主的文章 https://blog.csdn.net/LLand520/article/details/101347077?depth_1-utm_source=distribute.pc_relevant.none-task&utm_source=distribute.pc_relevant.none-task 如有侵权等事宜,请联系我,即刻删除。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3