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

article/2025/8/27 10:01:00

图片的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


http://chatgpt.dhexx.cn/article/jRqtE6S5.shtml

相关文章

Python 保存图片的两种方法

有时我们需要保存我们的图片,那我们可以怎么保存呢? 可参考下列保存的两种方法: 第一种:cv2.imwrite() 示例: # 方法一 : import cv2 cv2.imwrite("imwrite_pic.jpg", cv2.imread(pic.jpg)) 第二种:i…

python图片存取四种常用方法记录

一、PIL(Python Imaging Library)#python图像处理库 from PIL import Image import numpy as np #数值计算扩展包I Image.open("1.jpg") #读入图片 I.show() #显示图片 print(I) …

python保存图片的常用方法

保存图片的常用方法 1.PIL的保存图片方法 path r"./001.jpg" #图片路径 img Image.open(path) #打开图片 img.save("1.jpg") #将图片保存为1.jpg2.opencv保存图片 path r"./001.jpg" #图片路径 #img cv.imdecode(np.fromfi…

本地及服务器如何清除redis缓存

1、本地环境清除redis缓存 我用的redis管理工具是RedisDesktopManager,安装可参考https://blog.csdn.net/lihua5419/article/details/80661826 清除缓存命令为flushall,如下图所示: 2、服务器上清除redis缓存 我们服务器用的是Linux系统&a…

Redis 缓存删除策略

Redis(Remote Dictionary Server ),即远程字典服务,是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。 Redis是一个key-value存储系统。和Memcached类似&#xf…

Linux下redis清理缓存

1、先确保redis进程存在: 2、进入redsi下面的bin目录; 3、执行:执行./redis-cli登陆; 4、查看当前数据库key的数量,执行:dbsize命令 (如果出现(error) ERR unknown command ‘(error)’ &#x…

利用Redis进行数据缓存

1. 引言 缓存有啥用? 降低对数据库的请求,减轻服务器压力提高了读写效率 缓存有啥缺点? 如何保证数据库与缓存的数据一致性问题?维护缓存代码搭建缓存一般是以集群的形式进行搭建,需要运维的成本 2. 将信息添加到…

Linux下如何清空Redis缓存

1.首先进到redis的安装目录,进到src目录下,找到redis-cli 2.首先用账号密码的方式进入到redis的服务端 ./redis-cli -h 127.0.0.1 -p 6379 进去后会出现下面的界面ip:port> 然后,输入密码进行鉴权>auth "yourpassword"&a…

redis如何清空指定缓存和所有缓存

Windows环境下使用命令行进行redis缓存清理 1.访问redis根目录 cd D:\development_tools\redis64-3.0.501 2.登录redis:redis-cli -h 127.0.0.1 -p 6379 3.查看所有key值:keys * 4.删除指定索引的值:del key 5.清空整个 Redis 服务器的数据&…

redis删除缓存

首先下载一个redis可视化管理页面:RedisDesktopManager, 1、点击连接到redis服务器 2、 填写连接Ip地址,端口(默认6379),有密码填写密码,没用密码就不用填写了,然后点击测试连接,连接成功后,可以找到自己…

如何清理Redis中的缓存

首先在cmd模式下进入redis的目录, 然后使用 redis-cli -p 6379(指定进入的端口号,本人的端口号为6379) 进入该端口的redis数据库之后有以下两种清空缓存的命令 1.清空当前redis数据库缓存flushdb flushdb 2.清空整个redis缓存flushall flushall

redis如何清空缓存

前言: 如果你们的项目用到redis啦,虽然设置了过期时间,但有时候修改bug,仍然需要及时清空缓存,去读数据库的数据,所以这篇文章讲解如何在linux下清除redis的缓存。 正文: 1.首先进到redis的安…

redis如何清空当前缓存和所有缓存

Windows环境下使用命令行进行redis缓存清理 1、redis安装目录下输入cmd 2、redis-cli -p 端口号 3、flushdb 清除当前数据库缓存 4、flushall 清除整个redis所有缓存 客户端直接 右键即可:

redis 清理缓存

----windos 方法1,重启redis也能请缓存。 方法2,清缓存前确保redis-server.exe进程已经启动,然后打开redis-cli.exe,跳出的CMD里面输入flushall,显示OK就可以了。 flushall:清空整个redis 服务器的数据(删除…

redis清理缓存

redis如何清空缓存 如果你们的项目用到redis啦,虽然设置了过期时间,但有时候修改bug,仍然需要及时清空缓存,去读数据库的数据,所以这篇文章讲解如何清除redis的缓存。 正文 1.首先进到redis的安装目录,进…

WPS为公式编号

首先打开标尺,看一下中间位置(放公式),和后面位置(放编号)的刻度是多少,我中间位置目测是17个字符,后面位置是38个字符 为你的公式新建一个样式 这里主要注意两个地方,“制表位”和“段落”…

mathtype自动设置公式编号及更新

在写论文的时候难免要用到mathtype,mathtype相对来说还是好用的 使用mathtype的好处之一是可以利用mathtype自动设置公式编号及更新,非常方便,而且可以引用公式,在删除公式时不用手动更新公式编号,mathtype可以自动帮你…

使用MathType为公式自动编号

使用MathType为公式自动编号 公式格式设置修改章节号 公式格式设置 首先设置编号格式,在这里我们先将公式设置成(1-1-1)这样的,后续再讲如何修改成(1-1),看这两者有什么区别; 插入…

Mathtype怎么设置公式编号 ?公式编号怎么自动更新?删除新增公式后编号自动更新?

文章目录 1 公式编号设置2 插入公式3 公式编号怎么自动更新3.1 正常插入公式 编号自动更新3.2 文章中 增加公式 编号自动更新3.3 文章中 删除公式 编号自动更新3.4 文中 引用的公式编号 及 自动更新 以插入下面公式为例, 假如现在在第二单元,插入第一公式…

中值滤波器 C++ 实现

均值滤波是像素周围的33的像素做平均值操作, 那么中值就是在33中的像素中寻找中值 一般来说这个中值滤波是去除椒盐噪声的非常理想的选择。 /** ** method to remove noise from the corrupted image by median value * param corrupted input grayscale binary ar…