python读取与保存图片的exif信息

图片的exif文件格式中保存了很多信息,比如GPS经纬度,高度,焦距等信息。

在图片的属性中可以看到这些信息:

我们可以使用python来进行exif数据的读取和保存。

1. 首先安装piexif

pip3 install piexif

2.exif数据读取代码

import piexif
from PIL import Image

# Read Image
fname = './1.JPG'
img = Image.open(fname)
exif_dict = piexif.load(img.info['exif'])

# Read exif data
longitude = exif_dict['GPS'][piexif.GPSIFD.GPSLongitude]
latitude = exif_dict['GPS'][piexif.GPSIFD.GPSLatitude]
altitude = exif_dict['GPS'][piexif.GPSIFD.GPSAltitude]
focal_length = exif_dict['Exif'][piexif.ExifIFD.FocalLength]
print('longitude:', longitude)
print('latitude:', latitude)
print('altitude:', altitude)
print('focal length:', focal_length)

数据输出如下:

longitude: ((117, 1), (17, 1), (532029, 10000))
latitude: ((31, 1), (43, 1), (299847, 10000))
altitude: (44783, 1000)
focal length: (880, 100)

 说明:exif数据用的是分数格式和度分秒格式。

比如 ((117, 1), (17, 1), (532029, 10000))的含义是117/1度17/1分532029/10000秒,即117°17′53.2029″

(44783, 1000)的含义是44783/1000,即44.783

3.exif数据修改与保存代码

# Modify exif data
exif_dict['GPS'][piexif.GPSIFD.GPSLongitude] = ((180, 1), (17, 1), (532029, 10000))

# Save image with modified exif data
exif_bytes = piexif.dump(exif_dict)
img.save('1_copy.JPG', exif=exif_bytes)

我在项目中遇到的一个需求:

无人机航拍图像分辨率太大,需要对图像进行缩放,同时保留GPS数据(因为后续算法需要GPS数据)。

如果用opencv来resize图片再imwrite的话,会丢失GPS信息,不可行。可用如下的代码:

import piexif
from PIL import Image

# Read Image
fname = './DJI_0001.JPG'
img = Image.open(fname)
exif_dict = piexif.load(img.info['exif'])

# Resize image
resize_img = img.resize((1920, 1080), Image.ANTIALIAS) 

# Save resized image with original exif data
exif_bytes = piexif.dump(exif_dict)
resize_img.save('1_copy.JPG', exif=exif_bytes)

参考:How to modify EXIF data in python - Stack Overflow

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值