获取照片的地理定位信息是一项很有用的功能,可以让我们了解在拍摄照片时的拍摄位置,下面为您提供Python实现获取照片的地理定位信息的攻略。
1. 安装必要的Python库
首先,需要安装Pillow
和PIL.ExifTags
两个Python库,它们用于读取照片的EXIF信息,其中包含了拍摄照片的经纬度、海拔等信息。
pip install Pillow
2. 读取照片的EXIF信息
接下来,需要使用Pillow
和PIL.ExifTags
库读取照片的EXIF信息。其中,PIL.ExifTags.TAGS
包含了所有EXIF信息的标签,可以通过该标签来获取对应的信息值。
from PIL import Image
from PIL.ExifTags import TAGS, GPSTAGS
def get_exif(filename):
image = Image.open(filename)
exifdata = image.getexif()
if not exifdata:
return None
exif = {}
for tag, value in exifdata.items():
decoded = TAGS.get(tag, tag)
if decoded == "GPSInfo":
gps_data = {}
for t in value:
subdecoded = GPSTAGS.get(t, t)
gps_data[subdecoded] = value[t]
exif[decoded] = gps_data
else:
exif[decoded] = value
return exif
3. 解析照片的GPS信息
照片的GPS信息保存在EXIF信息的GPSInfo
标签下,它包含了照片的经度、纬度、高度等信息。下面是一个示例脚本,可以通过调用get_location
函数,获取照片的GPS信息。
from fractions import Fraction
def convert_to_degress(value):
"""
Helper function to convert the GPS coordinates stored in the EXIF to degress in float format
"""
d = float(value[0][0]) / float(value[0][1])
m = float(value[1][0]) / float(value[1][1])
s = float(value[2][0]) / float(value[2][1])
return d + (m / 60.0) + (s / 3600.0)
def get_location(exif):
if "GPSInfo" not in exif:
return None
gps_info = exif["GPSInfo"]
gps_latitude = gps_info.get("GPSLatitude")
gps_latitude_ref = gps_info.get('GPSLatitudeRef')
gps_longitude = gps_info.get("GPSLongitude")
gps_longitude_ref = gps_info.get('GPSLongitudeRef')
if not gps_latitude or not gps_latitude_ref or not gps_longitude or not gps_longitude_ref:
return None
lat = convert_to_degress(gps_latitude)
if gps_latitude_ref == 'S':
lat = 0 - lat
lng = convert_to_degress(gps_longitude)
if gps_longitude_ref == 'W':
lng = 0 - lng
return lat, lng
示例1
下面是一个示例,通过调用get_location
函数,获取example.jpg
照片的地理定位信息,并打印出经纬度信息。
filename = "example.jpg"
exif = get_exif(filename)
location = get_location(exif)
print(location)
输出结果:
(39.99282777777778, 116.44916888888889)
示例2
下面是一个示例,遍历指定目录下的所有照片文件,获取照片的地理定位信息,并保存到一个CSV文件中。
import os
import csv
def get_photo_location(folder):
photo_location = []
for root, dirs, files in os.walk(folder):
for file in files:
if file.endswith(".jpg"):
filepath = os.path.join(root, file)
exif = get_exif(filepath)
location = get_location(exif)
if location:
photo_location.append([file, location[0], location[1]])
return photo_location
def save_to_csv(filename, data):
with open(filename, mode='w', newline='') as file:
writer = csv.writer(file)
writer.writerow(["filename", "latitude", "longitude"])
for row in data:
writer.writerow(row)
folder = "/path/to/photo_folder"
photo_location = get_photo_location(folder)
save_to_csv("photo_location.csv", photo_location)
结束语
通过上述步骤,可以轻松地使用Python获取照片的地理定位信息,并应用到各种实际场景中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现获取照片的地理定位信息 - Python技术站