#ecoding:utf-8
import datetime
from PIL import Image
import piexif
import csv
import os
def main(csv_path, image_root, save_root):
csv_data = open(csv_path, "r")
reader = csv.reader(csv_data)
# 读取csv的每一行,跳过标题行
for item in reader:
if reader.line_num <= 1:
continue
lng = float(item[0])
lat = float(item[1])
#alt=(item[2])
#print('{} finished'.format(item[-1]))
# 将经纬度与相对航高转为exif可用的经纬度与行高
# exif需要的航高输入为(20000,2)格式,表示高度为20000/100米
# exif需要的经度与维度为((12, 1), (20,1), (41000, 1000))格式表示12度20分41秒
lng_exif = format_latlng(lng)
lat_exif = format_latlng(lat)
#alt_exif = (0,10000)
#_dict = {"alt": alt_exif, "lng":
#lng_exif, "lat": lat_exif, "lng_ref":'S', "lat_ref":'N'}
_dict = {"lng":
lng_exif, "lat": lat_exif, "lng_ref":'E', "lat_ref":'N'}
image_path = os.path.join(image_root, item[-1]).replace("\\","/") + '.jpg'
save_path = os.path.join(save_root, item[-1]).replace("\\","/") + '.jpg'
# 修改图片的exif
try:
read_modify_exif(image_path, save_path, _dict)
print("第" + str(reader.line_num-1) + "张图片处理完成!")
except Exception as ex:
#print(ex)
continue
def format_latlng(latlng):
"""经纬度十进制转为分秒"""
degree = int(latlng)
res_degree = latlng - degree
minute = int(res_degree * 60)
res_minute = res_degree * 60 - minute
seconds = round(res_minute * 60.0,3)
return ((degree, 1), (minute,1), (int(seconds*1000), 1000))
def read_modify_exif(image_path,save_path, _dict):
""" 读取并且修改exif文件"""
img = Image.open(image_path) # 读图
#exif_dict = piexif.load(img.info['exif']) # 提取exif信息
#print('alt:{} lng:{} lat:{}'.format(exif_dict['GPS'][piexif.GPSIFD.GPSAltitude], exif_dict['GPS'][piexif.GPSIFD.GPSLongitude], exif_dict['GPS'][piexif.GPSIFD.GPSLatitude]))
exif_dict = {"GPS":{}}
#exif_dict['GPS'][piexif.GPSIFD.GPSAltitude] = _dict['alt'] # 修改高度,GPSAltitude是内置变量,不可修改
exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = _dict['lng'] # 修改经度
exif_dict['GPS'][piexif.GPSIFD.GPSLatitude] = _dict['lat'] # 修改纬度
exif_dict['GPS'][piexif.GPSIFD.GPSLongitudeRef] = _dict['lng_ref'] # odm需要读取,一般为’W'
exif_dict['GPS'][piexif.GPSIFD.GPSLatitudeRef] = _dict['lat_ref'] # 一般为‘N'
exif_bytes = piexif.dump(exif_dict)
#print(exif_dict['GPS'][piexif.GPSIFD.GPSLongitude])
img.save(save_path, "jpeg", exif=exif_bytes) # 保存
def check_folder(path_list):
"""输入为文件夹列表,文件夹不存在则创建"""
for path in path_list:
if not os.path.exists(path):
os.mkdir(path)
if __name__ == "__main__":
csv_path = 'C:/Users/Administrator/Desktop/1/from/pos.csv'
image_root = 'C:/Users/Administrator/Desktop/1/from'
save_root = 'C:/Users/Administrator/Desktop/1/3'
check_folder([csv_path, image_root, save_root])
main(csv_path, image_root, save_root)