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 相关文章推荐
videocapture库制作python视频高速传输程序
Dec 23 Python
python绘制双柱形图代码实例
Dec 14 Python
python判断数字是否是超级素数幂
Sep 27 Python
Python基础教程之异常详解
Jan 10 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
python实现websocket的客户端压力测试
Jun 25 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
Python 跨.py文件调用自定义函数说明
Jun 01 Python
Python操作Word批量生成合同的实现示例
Aug 28 Python
Python 中的单分派泛函数你真的了解吗
Jun 22 Python
Python selenium绕过webdriver监测执行javascript
Apr 12 Python
Elasticsearch 聚合查询和排序
Apr 19 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在Web开发领域的优势
2006/10/09 PHP
实用函数5
2007/11/08 PHP
php中使用Imagick实现图像直方图的实现代码
2011/08/30 PHP
PHP children()函数讲解
2019/02/03 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
基于SVG的web页面图形绘制API介绍及编程演示
2013/06/28 Javascript
如何学习Javascript入门指导
2013/11/01 Javascript
ie下$.getJSON出现问题的解决方法
2014/02/12 Javascript
javascript 寻找错误方法整理
2014/06/15 Javascript
new Date()问题在ie8下面的处理方法
2014/07/31 Javascript
node.js中的fs.utimes方法使用说明
2014/12/15 Javascript
javascript实现动态导入js与css等静态资源文件的方法
2015/07/25 Javascript
Bootstrap精简教程
2015/11/27 Javascript
使用JavaScript脚本判断页面是否在微信中被打开
2016/03/06 Javascript
ExtJs的Ext.Ajax.request实现waitMsg等待提示效果
2017/06/14 Javascript
利用JavaScript如何查询某个值是否数组内
2017/07/30 Javascript
javascript实现拖拽碰撞检测
2020/03/12 Javascript
jQuery cookie的公共方法封装和使用示例
2020/06/01 jQuery
python使用marshal模块序列化实例
2014/09/25 Python
Python中的time模块与datetime模块用法总结
2016/06/30 Python
python直接获取API传递回来的参数方法
2018/12/17 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
Pandas时间序列:时期(period)及其算术运算详解
2020/02/25 Python
Django如何在不停机的情况下创建索引
2020/08/02 Python
CSS3制作炫酷带方向感应的鼠标滑过图片3D动画
2016/03/16 HTML / CSS
香港网上花店:FlowerAdvisor香港
2019/05/30 全球购物
你经历的项目中的SCM配置项主要有哪些?什么是配置项?
2013/11/04 面试题
校园公益广告语
2014/03/13 职场文书
民族学专业职业生涯规划范文:积跬步以至千里
2014/09/11 职场文书
不服从公司安排检讨书
2014/09/24 职场文书
代办社保委托书范文
2014/10/06 职场文书
贷款承诺书
2015/01/20 职场文书
专家推荐信范文
2015/03/26 职场文书
Python Pandas读取Excel日期数据的异常处理方法
2022/02/28 Python
Python必备技巧之字符数据操作详解
2022/03/23 Python