【无标题】Python 应用POS信息写入JPG exif

POS文件GPS数据写入JGP exif信息

将无人机航飞POS文件中经纬度写入对应JPG照片的exif信息中,这样便于数据处理,以及当照片有经纬度数据后自动化应用。

	def write_gps_img(self):
		self.get_useful_img()
		pos_file=self.ent_pospath.get()
		(path, filename) = os.path.split(pos_file)
		(file, ext) = os.path.splitext(filename)
		mission_name=file
		# suffix=ext
		# #if suffix=="txt":

		self.txt_2_csv(pos_file)

		csv_path=self.output_csv_path
		csv_data = open(csv_path, "r")
		reader = csv.reader(csv_data)


		self.img_list_new = sorted(os.listdir(self.new_file_path))  # 文件名按字母排序
		parent_path = os.path.dirname(self.new_file_path)#取父级文件路径

		if self.ent_imgout.get()=="":

			jpeg_savepath=self.new_file_path+mission_name+"exifpos"+"/"
			os.mkdir(jpeg_savepath)
		else:
			jpeg_savepath =self.ent_imgout.get()+"/"
		global id
		id=0
		total = int( end ) - int( start ) + 1
		# 读取csv的每一行,跳过标题行
		for item in reader:
			# if reader.line_num <= 1: #跳过标题行
			# 	continue
			try:
				float(item[1])
			except BaseException:
				# tk.messagebox.showinfo( title="数据加载问题", message="POS数据未整理" )
				continue
			else:

				lat = float(item[1])
				lng = float(item[2])
				alt = float(item[3])

				# 将经纬度与相对航高转为exif可用的经纬度与行高
				# exif需要的航高输入为(20000,2)格式,表示高度为20000/100米
				# exif需要的经度与维度为((12, 1), (20,1), (41000, 1000))格式表示12度20分41秒
				lng_exif = self.format_latlng(lng)
				lat_exif = self.format_latlng(lat)
				alt_exif = (int(100 * round(alt, 2)), 100)

				_dict = {"alt": alt_exif, "lng":
					lng_exif, "lat": lat_exif, "lng_ref": 'E', "lat_ref": 'N'}   #此处需要特别注意,界定东经与西经。

				image_path = self.new_file_path + "/" + self.img_list_new[id]
				#save_root=self.new_file_path+"imagesExif"
				save_path =jpeg_savepath + self.img_list_new[id]
				my_file=Path(save_path)
				if my_file.is_file():
					# save_path = jpeg_savepath + self.img_list_new[id] + "_1"
					save_path = jpeg_savepath + "R"+self.img_list_new[id]
				else:
					save_path = jpeg_savepath + self.img_list_new[id]

				# 修改图片的exif
				self.read_modify_exif(image_path, save_path, _dict)
				# print('{} finished'.format(item[-1]))
				id += 1
				print(id)
				self.progress( id, total )
		if id==total:
			tkinter.messagebox.showinfo( '提示', '提取并写入信息成功!' )
		else:
			tkinter.messagebox.showerror('结果错误','核对相关数据后重新提取!')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值