python批量写入经纬度

#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)
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值