-
这里的图片一般为截图。
-
若导入的图片是相机拍摄的,则该图片自带EXIF字典,故不需要创建EXIF字典这一步骤,直接更改EXIF信息即可。
在线查看照片EXIF信息网站(包含拍摄地点(GPS)、快门速度、ISO、光圈、拍摄时间等信息)EXIF信息查看器 (tuchong.com)
最终借助 copilot 完成了以下 python 代码:
1、GPS坐标以度分秒形式输入
# 2023-12-28 15:41
# 需求:用python写一段给photo.jpg增加gps信息的程序
from PIL import Image
import piexif
# 打开图片
img = Image.open('photo.jpg')
# 创建一个新的EXIF字典
exif_dict = {"0th":{}, "Exif":{}, "GPS":{}, "1st":{}, "thumbnail":None}
# 创建一个GPS信息字典
# 注意:这里的经度、纬度和海拔是示例值,你需要替换为实际的GPS信息
# GPS信息需要以(度,分,秒)的形式表示,每个值都是一个二元组,第一个元素是数值,第二个元素是分母
gps_info = {
piexif.GPSIFD.GPSLatitude: ((30, 1), (19, 1), (19, 1)),
piexif.GPSIFD.GPSLongitude: ((120, 1), (22, 1), (31, 1)),
piexif.GPSIFD.GPSAltitude: (500, 1), # 海拔高度,单位为米
piexif.GPSIFD.GPSLatitudeRef: 'N', # 'N'表示北纬,'S'表示南纬
piexif.GPSIFD.GPSLongitudeRef: 'E', # 'E'表示东经,'W'表示西经
}
# 将GPS信息添加到EXIF字典中
exif_dict['GPS'] = gps_info
# 将EXIF字典转换为字节串
exif_bytes = piexif.dump(exif_dict)
# 将带有EXIF信息的字节串插入到图片中
img.save('photo_with_gps_copilot_dufenmiao.jpg', exif=exif_bytes)
2、GPS坐标以十进制格式输入
# # 2023-12-28 16:26
# 这段代码首先定义了一个函数decimal_to_dms,用于将十进制的经纬度转换为度分秒的形式。然后,它打开了一个名为photo.jpg的图片,并创建了一个新的EXIF字典。接着,它将你的经纬度转换为度分秒的形式,并创建了一个GPS信息字典。然后,它将GPS信息添加到EXIF字典中,并将EXIF字典转换为字节串。最后,它将带有EXIF信息的字节串插入到图片中,并保存了这个图片。新的图片名为photo_with_gps_copilot_shijinzhi.jpg
# 输入经纬度为十进制格式
# 在这种情况下,我们需要将十进制的经纬度转换为度分秒(DMS)的形式。以下是转换的步骤:
# 1.度(D)是十进制经纬度的整数部分。
# 2.分(M)是十进制经纬度的小数部分乘以60的整数部分。
# 3.秒(S)是十进制经纬度的小数部分乘以60后的小数部分再乘以60
from PIL import Image
import piexif
# 然后,你可以使用这个函数来转换你的经纬度,并将其添加到EXIF信息中:
def decimal_to_dms(decimal):
degree = int(decimal)
temp = (decimal - degree) * 60
minute = int(temp)
second = int(temp - minute) * 60
return ((degree, 1), (minute, 1), (second, 1))
# 打开图片
img = Image.open('photo.jpg')
# 创建一个新的EXIF字典
exif_dict = {"0th":{}, "Exif":{}, "GPS":{}, "1st":{}, "thumbnail":None}
# 你的经纬度
latitude_decimal = 30.363497830648367
longitude_decimal = 120.39312053918955
# 转换为度分秒形式
latitude_dms = decimal_to_dms(latitude_decimal)
longitude_dms = decimal_to_dms(longitude_decimal)
# 创建一个GPS信息字典
gps_info = {
piexif.GPSIFD.GPSLatitude: latitude_dms,
piexif.GPSIFD.GPSLongitude: longitude_dms,
piexif.GPSIFD.GPSAltitude: (500, 1), # 海拔高度,单位为米
piexif.GPSIFD.GPSLatitudeRef: 'N', # 'N'表示北纬,'S'表示南纬
piexif.GPSIFD.GPSLongitudeRef: 'E', # 'E'表示东经,'W'表示西经
# piexif.GPSIFD.GPSLatitude: ((30, 1), (19, 1), (19, 1)),
# piexif.GPSIFD.GPSLongitude: ((120, 1), (22, 1), (31, 1)),
# piexif.GPSIFD.GPSAltitude: (500, 1), # 海拔高度,单位为米
# piexif.GPSIFD.GPSLatitudeRef: 'N', # 'N'表示北纬,'S'表示南纬
# piexif.GPSIFD.GPSLongitudeRef: 'E', # 'E'表示东经,'W'表示西经
}
# 将GPS信息添加到EXIF字典中
exif_dict['GPS'] = gps_info
# 将EXIF字典转换为字节串
exif_bytes = piexif.dump(exif_dict)
# 将带有EXIF信息的字节串插入到图片中
img.save('photo_with_gps_copilot_shijinzhi.jpg', exif=exif_bytes)