手机拍摄的照片可能会有拍摄地点的gps 经纬度坐标信息附件资源包中给几张这样的照片,请编程提取经纬度,然后根据经纬度搜寻对应的地址(国家、城市、街道、门牌号等),将地址打印在照片上形成新照片。
时间: 2023-06-18 15:07:57 浏览: 176
这个任务可以通过 Python 的 exifread 和 geopy 库来完成。exifread 可以读取照片的 EXIF 信息,包括 GPS 信息,geopy 可以将 GPS 坐标转换为具体的地址。
首先需要安装 exifread 和 geopy 库:
```
pip install exifread
pip install geopy
```
然后可以使用以下代码实现提取经纬度并搜寻对应的地址:
```python
import exifread
from geopy.geocoders import Nominatim
from PIL import Image, ImageDraw, ImageFont
# 读取照片的 GPS 信息
def get_gps_info(image_path):
with open(image_path, 'rb') as f:
tags = exifread.process_file(f)
gps_latitude_ref = tags.get('GPS GPSLatitudeRef', None)
gps_latitude = tags.get('GPS GPSLatitude', None)
gps_longitude_ref = tags.get('GPS GPSLongitudeRef', None)
gps_longitude = tags.get('GPS GPSLongitude', None)
if gps_latitude and gps_latitude_ref and gps_longitude and gps_longitude_ref:
lat_value = gps_latitude.values
lat_ref = gps_latitude_ref.values
lng_value = gps_longitude.values
lng_ref = gps_longitude_ref.values
if lat_value and lat_ref and lng_value and lng_ref:
lat = (float(lat_value[0].num) / float(lat_value[0].den)) + \
(float(lat_value[1].num) / float(lat_value[1].den)) / 60.0 + \
(float(lat_value[2].num) / float(lat_value[2].den)) / 3600.0
if lat_ref[0] == 'S':
lat = -lat
lng = (float(lng_value[0].num) / float(lng_value[0].den)) + \
(float(lng_value[1].num) / float(lng_value[1].den)) / 60.0 + \
(float(lng_value[2].num) / float(lng_value[2].den)) / 3600.0
if lng_ref[0] == 'W':
lng = -lng
return lat, lng
return None, None
# 搜寻对应的地址
def get_address(lat, lng):
geolocator = Nominatim(user_agent="geoapiExercises")
location = geolocator.reverse(f"{lat}, {lng}")
return location.address
# 在照片上添加文字
def add_text(image_path, text):
img = Image.open(image_path)
draw = ImageDraw.Draw(img)
font = ImageFont.truetype("arial.ttf", 40)
draw.text((10, 10), text, font=font, fill=(255, 255, 255, 255))
img.save("output.jpg")
# 测试
image_path = "test.jpg"
lat, lng = get_gps_info(image_path)
if lat and lng:
address = get_address(lat, lng)
if address:
add_text(image_path, address)
```
这段代码会读取指定照片的 GPS 信息,然后调用 geopy 库将 GPS 坐标转换为地址信息,最后调用 PIL 库在照片上添加文字并保存。你只需要将 "test.jpg" 替换成你自己的照片路径即可。
阅读全文