博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python小列子-读取照片位置
阅读量:4610 次
发布时间:2019-06-09

本文共 3230 字,大约阅读时间需要 10 分钟。

Python exifread

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

 

import exifreadimport reimport jsonimport requestsdef 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_addressGPS_info = find_GPS_image(pic_path='lllll.jpg')       # 照片address = find_address_from_GPS(GPS=GPS_info)print(address)

  

转载于:https://www.cnblogs.com/wuyongcong/p/11064324.html

你可能感兴趣的文章
[luogu3203 HNOI2010] 弹飞绵羊 (分块)
查看>>
mui搜索框 搜索点击事件
查看>>
超链接样式设置(去下划线)(转)
查看>>
2016012003+陈琦+散列函数的应用及其安全性
查看>>
Android 状态栏通知Notification、NotificationManager详解
查看>>
UIApplicationDelegate协议
查看>>
Jmeter测试dubbo接口填坑
查看>>
[zz]GDB调试精粹及使用实例
查看>>
数据库的创建和删除
查看>>
最简单的三层实例【插入据
查看>>
设计模式学习笔记——Prototype原型模式
查看>>
pom.xml里有红叉报错的解决办法
查看>>
Perl last和next的用法区别
查看>>
Selenium 管理 Cookies
查看>>
exceptionfunction[LeetCode]Permutations
查看>>
Linux(2)_常用命令2
查看>>
自定义分页
查看>>
[转]DELPHI——调试(1)
查看>>
JS秒数转成分秒时间格式
查看>>
xp_cmdshell 命令的开启与关闭,和状态查询
查看>>