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
python读取与保存图片的exif信息相关推荐
- python读取和保存图片的三种方法
python读取和保存图片 opencv import cv2 #load img = cv2.imread('0.png') #show cv.imshow('title', img) #save ...
- 用Python读取照片拍摄的详细信息(拍摄时间、地址等)
前言 其实咱们平时拍摄的照片里隐藏了大量的私密信息,例如:拍摄时间.极其精确的GPS信息等.接下来尝试用python脚本分析照片,获取照片原图的拍摄信息. 1.准备条件 pip install ...
- python批量修改图片的exif信息,增加GPS信息。
有时候需要给图片增加地理信息,比如在用无人机影像做3维建模或者正射影像时,可以将无人机的gps写入图片,然后用ODM快速完成三维模型与正射影像生成. ODM的使用方法可以参看下面这篇博客. h ...
- 用C#读取数码相片的EXIF信息(一)
现在的数码相机拍摄出来的照片表面上看都是很普通的JPEG的图片,但通常还包含着诸如相片拍摄时使用的相机生产商.型号.光圈值.快门速度等各类附加信息,这就是所谓的Exif信息.Exif是一种图像文件格式 ...
- Python 读取显示保存图片----python skimage图像处理
转载:https://blog.csdn.net/weixin_41500849/article/details/80366991 基于python脚本语言开发的数字图片处理包,比如PIL,Pillo ...
- java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息
一般情况下是java程序读取不到gps等扩展信息的.如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址: http://code.goog ...
- python读取cad图纸_DWG文件信息的读取
在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上浏览. using System; using System.Collections.Generic; using ...
- python读取、保存图片的方法
matplotlib 输入:列表或二维矩阵 (1)例如列表: #coding=utf-8 from matplotlib import pyplot as plt X = [[1,2],[3,4],[ ...
- python读取身份证中的生日信息
编写程序输入一个列表,列表中的元素为身份证(18位),根据身份证号获得生日信息,说明身份证的7到10表示出生年,11到12表示出生月,13到14表示出生日. 输入: id_cards = ['3101 ...
最新文章
- VMware HA实战攻略之四VMware HA安装及配置
- OpenCV中Mat类的重载运算符operator()的用法
- 查看mysql表中的所有索引
- XJOJ - 选信封(离散化+增广路)
- Spring系列(十):@Autowired 和@Resource注解用法介绍
- leetcode 172 python
- teststand调用python模块_NI TestStand 2019下载-测试管理软件NI TestStand 2019下载v19.0.1 官方版-西西软件下载...
- 批量拷贝文件到服务器,Syncovery(数据备份工具)如何在windows下远程访问服务器批量拷贝文件?Syncovery图文教...
- iOS毛玻璃效果(第一次写~有点紧张喔)
- Android:简易计算器
- ViT为何引入cls_token
- Hyper-V 配置静态 IP
- mysql的default_sql语句中default是什么意思?
- 上位机plc编程入门_【新手入门】西门子PLC编程入门学习
- 如何判断app在前台还是后台
- jQurey实现电梯效果
- BERT的vocabulary字典
- 2021年中国能源产量及消费量情况分析:一次性能源,同比增长2.7%[图]
- 人力资源管理专业知识与实务(初级)【13】
- java单元测试测试异常_Java单元测试中出现意外异常
热门文章
- 《大数据》笔记 Bonferroni correction
- 致程序员之家论坛的所有会员
- 哈希消息认证码HmacSHA256-javascript版
- mysql、oracle、sqlserver各自的默认端口号
- java几个注解的作用及比较(@RestController、@Controller、@ResponseBody、@RequestBody等)
- Altium Designer 18 原理图编译出现off grid错误处理方法
- Java基础编程之分解质因数
- CIPP翻转内衬法整体修复技术简介
- dbcontext的使用
- 分享关于UE4中matinee工具的使用教程