目录
简要介绍
exifread 是一个用于读取图像文件 EXIF 元数据的 Python 库,能够提取图片的隐藏信息,包括经纬度、拍摄时间等信息。
库的安装
使用exifread库首先要确保已经安装
python
pip install exifread
使用案例
python
import exifread
from datetime import datetime
def extract_exif_data(image_path):
with open(image_path, 'rb') as f:# 打开图像文件(二进制模式)
tags = exifread.process_file(f)# 读取 EXIF 数据
exif_data = {# 提取时间和经纬度信息
'DateTime': None,
'Latitude': None,
'Longitude': None
}
if 'Image DateTime' in tags:# 提取拍摄时间
exif_data['DateTime'] = str(tags['Image DateTime'])
if 'GPS GPSLatitude' in tags and 'GPS GPSLongitude' in tags: # 提取经纬度信息
latitude = tags['GPS GPSLatitude'].values
longitude = tags['GPS GPSLongitude'].values
try:# 转换经纬度格式
exif_data['Latitude'] = convert_to_degrees(latitude)
exif_data['Longitude'] = convert_to_degrees(longitude)
except ZeroDivisionError:
print("Warning: Division by zero detected in GPS data.")
exif_data['Latitude'] = None
exif_data['Longitude'] = None
return exif_data
def convert_to_degrees(values):
# 将 EXIF 的经纬度格式转换为十进制度数
d = float(values[0].num) / float(values[0].den)
m = float(values[1].num) / float(values[1].den)
s = float(values[2].num) / float(values[2].den)
# 检查分母是否为零
if values[0].den == 0 or values[1].den == 0 or values[2].den == 0:
raise ZeroDivisionError("Division by zero detected in GPS data.")
return d + (m / 60.0) + (s / 3600.0)
image_path = "FF.jpg" #图片路径
exif_data = extract_exif_data(image_path)
print(f"拍摄时间: {exif_data['DateTime']}")
print(f"纬度: {exif_data['Latitude']}")
print(f"经度: {exif_data['Longitude']}")
解析:
extract_exif_data 函数:该函数用于提取图片的 EXIF 数据,包括拍摄时间和经纬度信息。
convert_to_degrees 函数:该函数用于将 EXIF 的经纬度格式(度、分、秒)转换为十进制度数。
常见问题
- 在提取图片信息时可能遇到图片的经纬度提取不成功的情况
解决:
- 确保手机拍摄时打开GPS
- 传输方式
-
不同的传输方式可能会影响 EXIF 数据的保留。
-
通过社交媒体或云服务传输:许多社交媒体平台(如微信、QQ、微博等)和云服务(如 Google Drive、Dropbox 等)在传输图片时会压缩图片或移除 EXIF 数据以节省存储空间和带宽。
-
通过邮件传输:邮件服务通常会压缩附件,这可能导致 EXIF 数据丢失。
-
通过数据线直接传输:如果使用数据线直接将图片从手机传输到电脑,EXIF 数据通常会保留。
如何保留 EXIF 数据
为了确保图片的 EXIF 数据在传输过程中不被丢失,可以采取以下措施:
-
使用数据线直接传输:通过数据线直接将图片从手机传输到电脑,通常可以保留 EXIF 数据。
-
使用支持 EXIF 的传输工具:选择支持保留 EXIF 数据的传输工具,如一些专业的文件传输应用。
-
避免格式转换:尽量保持图片的原始格式(如 JPEG),避免转换为其他格式(如 PNG)。
-
使用支持 EXIF 的图片查看器和编辑器 :选择支持保留 EXIF 数据的图片查看器和编辑器,如
exiftool
、ImageMagick
等。