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抓取网页图片并放到指定文件夹
Apr 24 Python
Python中的Numpy入门教程
Apr 26 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
Jun 18 Python
关于python的list相关知识(推荐)
Aug 30 Python
tensorflow学习教程之文本分类详析
Aug 07 Python
浅谈Python中eval的强大与危害
Mar 13 Python
jupyter实现重新加载模块
Apr 16 Python
2020最新pycharm汉化安装(python工程狮亲测有效)
Apr 26 Python
基于Python实现简单学生管理系统
Jul 24 Python
Python requests接口测试实现代码
Sep 08 Python
用pushplus+python监控亚马逊到货动态推送微信
Jan 29 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 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
做个自己站内搜索引擎
2006/10/09 PHP
PHP 选项及相关信息函数库
2006/12/04 PHP
php 什么是PEAR?(第三篇)
2009/03/19 PHP
php实现Mongodb自定义方式生成自增ID的方法
2015/03/23 PHP
php下载文件超时时间的设置方法
2016/10/06 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
javascript函数声明和函数表达式区别分析
2014/12/02 Javascript
JS中改变this指向的方法(call和apply、bind)
2016/03/26 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
解析JavaScript实现DDoS攻击原理与保护措施
2016/12/26 Javascript
BootStrap实现文件上传并带有进度条效果
2017/09/11 Javascript
vue.js通过路由实现经典的三栏布局实例代码
2018/07/08 Javascript
Angular ui-roter 和AngularJS 通过 ocLazyLoad 实现动态(懒)加载模块和依赖
2018/11/25 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
JS关闭子窗口并且刷新上一个窗口的实现示例
2020/03/10 Javascript
Vue如何实现监听组件原生事件
2020/07/03 Javascript
解决VUE 在IE下出现ReferenceError: Promise未定义的问题
2020/11/07 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
Python连接MySQL并使用fetchall()方法过滤特殊字符
2016/03/13 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
python django下载大的csv文件实现方法分析
2019/07/19 Python
Python绘图实现台风路径可视化代码实例
2020/10/23 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
2020/11/17 Python
CSS3中的注音对齐属性ruby-align用法指南
2016/07/01 HTML / CSS
时尚孕妇装:Ingrid & Isabel
2019/05/08 全球购物
AutoShack.com加拿大:北美主要的汽车零部件零售商
2019/07/24 全球购物
草莓网官网:StrawberryNET
2019/08/21 全球购物
大学应届毕业生个人求职信
2013/09/23 职场文书
求职信范文怎么写
2014/01/29 职场文书
模特大赛策划方案
2014/05/28 职场文书
群教个人对照检查材料
2014/08/20 职场文书
开展批评与自我批评发言稿
2014/10/16 职场文书
原生JS实现分页
2022/04/19 Javascript
nginx lua 操作 mysql
2022/05/15 Servers
Mysql数据库事务的脏读幻读及不可重复读详解
2022/05/30 MySQL