在摄影和图像处理中,EXIF(可交换图像文件格式)数据扮演着非常重要的角色。它不仅包含了照片的基本信息如拍摄时间、相机型号等,还可能包含地理位置信息等更多细节。本文将指导你如何使用Python来修改一张JPEG图片中的EXIF数据,包括其GPS位置和拍摄时间。
为客户定制的临时修改图片信息,满足坐标修改和图片信息修。
准备工作
首先,确保你的环境中已经安装了必要的库:
pip install Pillow piexif
Pillow
是Python Imaging Library (PIL) 的替代品,提供了强大的图像处理能力;而piexif
是一个专门用于处理EXIF数据的库。
修改图片EXIF数据的步骤
-
加载图片及其现有的EXIF数据:
使用Image.open()
方法打开目标图片,并用piexif.load()
提取其中的EXIF数据。 -
添加或修改EXIF数据:
根据需要向EXIF字典中添加新的数据或者修改已有的信息。比如,我们可以通过设置特定字段来更新图片的GPS坐标和拍摄时间。 -
保存修改后的图片:
使用piexif.dump()
将修改后的EXIF字典转换为字节流,并通过img.save()
将其与图片一同保存。
下面是完整的代码示例:
from PIL import Image
import piexif
import datetime
def modify_exif_data(image_path, new_image_path):
# 打开图片并获取其现有的EXIF数据
img = Image.open(image_path)
try:
exif_dict = piexif.load(img.info['exif'])
except KeyError:
exif_dict = {"0th": {}, "Exif": {}, "GPS": {}, "1st": {}, "thumbnail": None}
# 添加或修改GPS信息
gps_info = {
piexif.GPSIFD.GPSLatitude: ((31, 1), (9, 1), (19, 1)), # 示例纬度
piexif.GPSIFD.GPSLongitude: ((105, 1), (43, 1), (31, 1)), # 示例经度
piexif.GPSIFD.GPSAltitude: (428, 1), # 海拔高度
piexif.GPSIFD.GPSLatitudeRef: 'N', # 北纬
piexif.GPSIFD.GPSLongitudeRef: 'E', # 东经
}
exif_dict['GPS'] = gps_info
# 设置新的拍摄时间
new_date_time = datetime.datetime(2025, 12, 28, 15, 41, 0)
exif_dict["Exif"][piexif.ExifIFD.DateTimeOriginal] = new_date_time.strftime("%Y:%m:%d %H:%M:%S")
# 将修改后的EXIF字典转为字节串并插入到图片中
exif_bytes = piexif.dump(exif_dict)
img.save(new_image_path, exif=exif_bytes)
# 调用函数进行测试
modify_exif_data('d:/wordspacePython/test/upImg/3.jpg', 'new.jpg')
3.jpg是原照
new.jpg是修改后的
右击照片属性查看修改后的信息
这段代码演示了如何使用Python脚本修改JPEG图片的EXIF数据,包括GPS坐标和拍摄时间。根据自己的需求调整代码中的具体值,即可轻松应用到不同的场景中。