python提取照片坐标信息的实例代码


Posted in Python onAugust 14, 2019

python提取照片坐标信息的代码如下所示:

from PIL import Image
from PIL.ExifTags import TAGS
import os
output="Z://result.csv"
out=open(output,'a')
out.write('lat,lon\n')
fpath="Z://iphonephoto"
for item in os.walk(fpath):
 ob=item[2]
 for i in ob:
  name=fpath+'/'+str(i)
  ret={}
  try:
   img=Image.open(name)
   if hasattr(img,'_getexif'):
    exifinfo=img._getexif()
    if exifinfo !=None:
     for tag,value in exifinfo.items():
      decoded=TAGS.get(tag,tag)
      ret[decoded]=value
      N1 = ret['GPSInfo'][2][0][0]
      N2 = ret['GPSInfo'][2][1][0]
      N3 = ret['GPSInfo'][2][2][0]
      N=int(N1)+int(N2)*(1.0/60)+int(N3)*(1.0/360000)
      E1 = ret['GPSInfo'][4][0][0]
      E2 = ret['GPSInfo'][4][1][0]
      E3 = ret['GPSInfo'][4][2][0]
      E=int(E1)+int(E2)*(1.0/60)+int(E3)*(1.0/360000)
      out.write(str(N)+','+str(E)+'\n')
  except:
   pass
out.close()

PS:Python小列子-读取照片位置

Python exifread

Python利用exifread库来解析照片的经纬度,对接百度地图API显示拍摄地点。

import exifread
import re
import json
import requests
def latitude_and_longitude_convert_to_decimal_system(*arg):
 """
 经纬度转为小数, 作者尝试适用于iphone6、ipad2以上的拍照的照片,
 :param arg:
 :return: 十进制小数
 """
 return float(arg[0]) + ((float(arg[1]) + (float(arg[2].split('/')[0]) / float(arg[2].split('/')[-1]) / 60)) / 60)
def find_GPS_image(pic_path):
 GPS = {}
 date = ''
 with open(pic_path, 'rb') as f:
  tags = exifread.process_file(f)
  for tag, value in tags.items():
   if re.match('GPS GPSLatitudeRef', tag):
    GPS['GPSLatitudeRef'] = str(value)
   elif re.match('GPS GPSLongitudeRef', tag):
    GPS['GPSLongitudeRef'] = str(value)
   elif re.match('GPS GPSAltitudeRef', tag):
    GPS['GPSAltitudeRef'] = str(value)
   elif re.match('GPS GPSLatitude', tag):
    try:
     match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
     GPS['GPSLatitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
    except:
     deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
     GPS['GPSLatitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
   elif re.match('GPS GPSLongitude', tag):
    try:
     match_result = re.match('\[(\w*),(\w*),(\w.*)/(\w.*)\]', str(value)).groups()
     GPS['GPSLongitude'] = int(match_result[0]), int(match_result[1]), int(match_result[2])
    except:
     deg, min, sec = [x.replace(' ', '') for x in str(value)[1:-1].split(',')]
     GPS['GPSLongitude'] = latitude_and_longitude_convert_to_decimal_system(deg, min, sec)
   elif re.match('GPS GPSAltitude', tag):
    GPS['GPSAltitude'] = str(value)
   elif re.match('.*Date.*', tag):
    date = str(value)
 return {'GPS_information': GPS, 'date_information': date}
def find_address_from_GPS(GPS):
 print(GPS)
 """
 使用Geocoding API把经纬度坐标转换为结构化地址。
 :param GPS:
 :return:
 """
 secret_key = 'xxxxxxxxxxxxxxxxxxxx'    # 百度地图创应用的秘钥 
 if not GPS['GPS_information']:
  return '该照片无GPS信息'
 lat, lng = GPS['GPS_information']['GPSLatitude'], GPS['GPS_information']['GPSLongitude']
 baidu_map_api = "http://api.map.baidu.com/geocoder/v2/?ak={0}&callback=renderReverse&location={1},{2}s&output=json&pois=0".format(
  secret_key, lat, lng)
 response = requests.get(baidu_map_api)
 content = response.text.replace("renderReverse&&renderReverse(", "")[:-1]
 baidu_map_address = json.loads(content)
 formatted_address = baidu_map_address["result"]["formatted_address"]
 # province = baidu_map_address["result"]["addressComponent"]["province"]
 # city = baidu_map_address["result"]["addressComponent"]["city"]
 # district = baidu_map_address["result"]["addressComponent"]["district"]
 return formatted_address
GPS_info = find_GPS_image(pic_path='lllll.jpg')  # 照片
address = find_address_from_GPS(GPS=GPS_info)
print(address)

总结

以上所述是小编给大家介绍的python提取照片坐标信息的实例代码 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
python使用in操作符时元组和数组的区别分析
May 19 Python
Python实现k-means算法
Feb 23 Python
python Opencv将图片转为字符画
Feb 19 Python
对python中的 os.mkdir和os.mkdirs详解
Oct 16 Python
python实现彩色图转换成灰度图
Jan 15 Python
Python中的字符串切片(截取字符串)的详解
May 15 Python
Python queue队列原理与应用案例分析
Sep 27 Python
python框架flask表单实现详解
Nov 04 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
Python pip配置国内源的方法
Feb 14 Python
python3检查字典传入函数键是否齐全的实例
Jun 05 Python
python属于软件吗
Jun 18 Python
python2使用bs4爬取腾讯社招过程解析
Aug 14 #Python
详解用python计算阶乘的几种方法
Aug 14 #Python
Python使用scrapy爬取阳光热线问政平台过程解析
Aug 14 #Python
用Python抢火车票的简单小程序实现解析
Aug 14 #Python
Python定时任务随机时间执行的实现方法
Aug 14 #Python
查看Python依赖包及其版本号信息的方法
Aug 13 #Python
使用python实现unix2dos和dos2unix命令的例子
Aug 13 #Python
You might like
将时间以距今多久的形式表示,PHP,js双版本
2012/09/25 PHP
关于PHP开发的9条建议
2015/07/27 PHP
Yii2 rbac权限控制操作步骤实例教程
2016/04/29 PHP
PHP的JSON封装、转变及输出操作示例
2019/09/27 PHP
js正文内容高亮效果的实现方法
2013/06/30 Javascript
Area 区域实现post提交数据的js写法
2014/04/22 Javascript
js实现鼠标滚轮控制图片缩放效果的方法
2015/02/20 Javascript
javascript随机显示背景图片的方法
2015/06/18 Javascript
个人网站留言页面(前端jQuery编写、后台php读写MySQL)
2016/05/03 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
基于jQuery实现选项卡效果
2017/01/04 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
详解vue-admin和后端(flask)分离结合的例子
2018/02/12 Javascript
vue.draggable实现表格拖拽排序效果
2018/12/01 Javascript
vue实现列表滚动的过渡动画
2020/06/29 Javascript
如何在vue 中引入使用jquery
2020/11/10 jQuery
Python实现的监测服务器硬盘使用率脚本分享
2014/11/07 Python
python optparse模块使用实例
2015/04/09 Python
详解python中executemany和序列的使用方法
2017/08/12 Python
基于DATAFRAME中元素的读取与修改方法
2018/06/08 Python
基于Numpy.convolve使用Python实现滑动平均滤波的思路详解
2019/05/16 Python
python异步实现定时任务和周期任务的方法
2019/06/29 Python
Python requests获取网页常用方法解析
2020/02/20 Python
基于python实现地址和经纬度转换
2020/05/19 Python
Python中logger日志模块详解
2020/08/04 Python
Python3.9新特性详解
2020/10/10 Python
html5使用canvas画空心圆与实心圆
2014/12/15 HTML / CSS
宝拉珍选英国官网:Paula’s Choice英国
2019/05/29 全球购物
销售经理竞聘书
2014/03/31 职场文书
八一建军节营销活动方案
2014/08/31 职场文书
大学生迟到检讨书500字
2014/10/17 职场文书
财务务虚会发言材料
2014/10/20 职场文书
2015年村计划生育工作总结
2015/04/28 职场文书
返乡农民工证明
2015/06/24 职场文书
python基础之类属性和实例属性
2021/10/24 Python
MySQL之select、distinct、limit的使用
2021/11/11 MySQL