import csv,os
import glob
import piexif
from PIL import Image
# 十进制转度分秒
def decimaltodegree(decimal):
deg = int(decimal)
min = int((decimal - deg) * 60)
sec = (((decimal - deg) * 60) - min)*60
return int(deg),int(min),int(sec*accuracy)
# 根据坐标值获取参数
def getRef(value, loc):
if value < 0:
return loc[0]
elif value > 0:
return loc[1]
if __name__ == "__main__":
jpgDir="./jpg/"
gpsDir="gps_write.csv"
# 1、读取表格坐标数据
gps_dict={}
with open(gpsDir, encoding="utf-8-sig", mode="r") as f:
reader = csv.DictReader(f)
for row in reader:
gps_dict[row['name']]={"lon":row['lon'],"lat":row['lat'],"altitude":row['altitude']}
# 2、读取所有照片路径
jpgs=glob.glob(jpgDir+"*.jpg")
# 3、坐标写入jpg图片
accuracy=10000000 #用作精度的参数,几个0就能保留几位小数,这边设置7位(默认最长)
for src_filename in jpgs:
jpgname=os.path.basename(src_filename)[:-4]
lat=float(gps_dict[jpgname]['lat'])
lon=float(gps_dict[jpgname]['lon'])
altitude=int(float(gps_dict[jpgname]['altitude'])*accuracy)
lat_deg,lat_min,lat_sec=decimaltodegree(lat)
lon_deg,lon_min,lon_sec=decimaltodegree(lon)
gps_ifd = {piexif.GPSIFD.GPSVersionID: (2, 0, 0, 0),
piexif.GPSIFD.GPSAltitudeRef: 0,
piexif.GPSIFD.GPSLongitudeRef: getRef(lon, ["W", "E"]),
piexif.GPSIFD.GPSLatitudeRef: getRef(lat, ["S", "N"]),
piexif.GPSIFD.GPSLongitude: ((lon_deg, 1), (lon_min, 1), (lon_sec, accuracy)),# (a,b)表示的值为a/b
piexif.GPSIFD.GPSLatitude: ((lat_deg, 1), (lat_min, 1), (lat_sec, accuracy)),
piexif.GPSIFD.GPSAltitude: (altitude, accuracy)
}
exif_dict = {"GPS":gps_ifd}
piexif.insert(piexif.dump(exif_dict),src_filename)