python实时经纬度_使用Python实时将gps返回的经纬度转化为图片

展开全部

主要就是做了两件事情:

1.生成一张有文本信息的JPG图片

2.写入EXIF信息

生成照片需要PIL和libjpeg

import Imageimport ImageDrawimport ImageFontdef create_pic(path, text=[], type='jpeg'):

img = Image.new("RGB", (2448, 3264), '#37b6ce')#颜色和大小

draw = ImageDraw.Draw(img)

font = ImageFont.truetype('ziti.ttf', 120)#ttf是字e68a8462616964757a686964616f31333363393735体,120是字号

for h in range(0, len(text)):#多行文本

draw.text((256, 256 + 120 * h), text[h], font=font)

img.save(path, type)#保存

# img.show()

读写EXIF信息需要pyexiv2,获取google的经纬度需要geopy

顺便说下经纬度的表示:

一般exif里看到的都是这样的57°55'56.6",是度,分,秒这么展示的,google上获取来的是十进制的57.9323888888888

所以需要转换一下再写进去

公式:57°55'56.6" =57+55/60+56.6/3600=57.9323888888888import fractionsimport datetimeimport osimport geopyimport pyexiv2import timetemplate = pyexiv2.ImageMetadata('IMG_4408.JPG')template.read()#exif信息很多,所以找个真正手机拍摄的照片当模版googlev3=geopy.GoogleV3()place,gps=googlev3.geocode(location)#获取gps信息,location写地名,比如‘北京王府井’,偶尔会被墙,最好挂个代理def set_exif(path, date_time=None, gps=()):

"""

datetime=2014:10:04 12:41:38

geo=(lat=39.12315,lng=115.12231)

"""

metadata = pyexiv2.ImageMetadata(path)

metadata.read()

for k in template.exif_keys:

metadata[k] = pyexiv2.ExifTag(k, template[k].value)

if not date_time:

date_str=pyexiv2.utils.exif(date_time)

metadata['Exif.Photo.DateTimeOriginal'] = date_str

metadata['Exif.Photo.DateTimeDigitized'] = date_str

metadata['Exif.Image.DateTime'] = date_str

if len(geo)>0:

c_lat = decimal2coordinate(geo[0], ['S', 'N'])

c_lng = decimal2coordinate(geo[1], ['W', 'E'])

metadata["Exif.GPSInfo.GPSLatitude"] = coordinate2rational(c_lat[0], c_lat[1], c_lat[2])

metadata["Exif.GPSInfo.GPSLatitudeRef"] = c_lat[3]

metadata["Exif.GPSInfo.GPSLongitude"] = coordinate2rational(c_lng[0], c_lng[1], c_lng[2])

metadata["Exif.GPSInfo.GPSLongitudeRef"] = c_lng[3]

else:

metadata._delete_exif_tag("Exif.GPSInfo.GPSLatitude")

metadata._delete_exif_tag("Exif.GPSInfo.GPSLatitudeRef")

metadata._delete_exif_tag("Exif.GPSInfo.GPSLongitude")

metadata._delete_exif_tag("Exif.GPSInfo.GPSLongitudeRef")

metadata.write()def decimal2coordinate(value, loc):

"""

loc=lat => ["S", "N"],lng => ["W", "E"]

retrun D,M,S,locate

"""

if value 

loc_value = loc[0]

elif value > 0:

loc_value = loc[1]

else:

loc_value = ""

abs_value = abs(value)

deg = int(abs_value)

t1 = (abs_value - deg) * 60

min = int(t1)

sec = round((t1 - min) * 60, 5)

return (deg, min, sec, loc_value)def coordinate2rational(D, M, S):

return (fractions.Fraction(D, 1), fractions.Fraction(int((M + S / 60) * 100), 100), fractions.Fraction(0, 1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值