python提取照片坐标信息的实例代码
python提取照片坐标信息的代码如下所示:
fromPILimportImage fromPIL.ExifTagsimportTAGS importos output="Z://result.csv" out=open(output,'a') out.write('lat,lon\n') fpath="Z://iphonephoto" foriteminos.walk(fpath): ob=item[2] foriinob: name=fpath+'/'+str(i) ret={} try: img=Image.open(name) ifhasattr(img,'_getexif'): exifinfo=img._getexif() ifexifinfo!=None: fortag,valueinexifinfo.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小列子-读取照片位置
Pythonexifread
Python利用exifread库来解析照片的经纬度,对接百度地图API显示拍摄地点。
importexifread importre importjson importrequests deflatitude_and_longitude_convert_to_decimal_system(*arg): """ 经纬度转为小数,作者尝试适用于iphone6、ipad2以上的拍照的照片, :paramarg: :return:十进制小数 """ returnfloat(arg[0])+((float(arg[1])+(float(arg[2].split('/')[0])/float(arg[2].split('/')[-1])/60))/60) deffind_GPS_image(pic_path): GPS={} date='' withopen(pic_path,'rb')asf: tags=exifread.process_file(f) fortag,valueintags.items(): ifre.match('GPSGPSLatitudeRef',tag): GPS['GPSLatitudeRef']=str(value) elifre.match('GPSGPSLongitudeRef',tag): GPS['GPSLongitudeRef']=str(value) elifre.match('GPSGPSAltitudeRef',tag): GPS['GPSAltitudeRef']=str(value) elifre.match('GPSGPSLatitude',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('','')forxinstr(value)[1:-1].split(',')] GPS['GPSLatitude']=latitude_and_longitude_convert_to_decimal_system(deg,min,sec) elifre.match('GPSGPSLongitude',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('','')forxinstr(value)[1:-1].split(',')] GPS['GPSLongitude']=latitude_and_longitude_convert_to_decimal_system(deg,min,sec) elifre.match('GPSGPSAltitude',tag): GPS['GPSAltitude']=str(value) elifre.match('.*Date.*',tag): date=str(value) return{'GPS_information':GPS,'date_information':date} deffind_address_from_GPS(GPS): print(GPS) """ 使用GeocodingAPI把经纬度坐标转换为结构化地址。 :paramGPS: :return: """ secret_key='xxxxxxxxxxxxxxxxxxxx'#百度地图创应用的秘钥 ifnotGPS['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"] returnformatted_address GPS_info=find_GPS_image(pic_path='lllll.jpg')#照片 address=find_address_from_GPS(GPS=GPS_info) print(address)
总结
以上所述是小编给大家介绍的python提取照片坐标信息的实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!