图片的exif文件格式中保存了很多信息,比如GPS经纬度,高度,焦距等信息。
在图片的属性中可以看到这些信息:
文章标签: 图像处理
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Jeff_zjf/article/details/121680347
版权
图片的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)
PS: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
联系客服