图片的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信息相关推荐

  1. python读取和保存图片的三种方法

    python读取和保存图片 opencv import cv2 #load img = cv2.imread('0.png') #show cv.imshow('title', img) #save ...

  2. 用Python读取照片拍摄的详细信息(拍摄时间、地址等)

    前言   其实咱们平时拍摄的照片里隐藏了大量的私密信息,例如:拍摄时间.极其精确的GPS信息等.接下来尝试用python脚本分析照片,获取照片原图的拍摄信息. 1.准备条件   pip install ...

  3. python批量修改图片的exif信息,增加GPS信息。

      有时候需要给图片增加地理信息,比如在用无人机影像做3维建模或者正射影像时,可以将无人机的gps写入图片,然后用ODM快速完成三维模型与正射影像生成.   ODM的使用方法可以参看下面这篇博客. h ...

  4. 用C#读取数码相片的EXIF信息(一)

    现在的数码相机拍摄出来的照片表面上看都是很普通的JPEG的图片,但通常还包含着诸如相片拍摄时使用的相机生产商.型号.光圈值.快门速度等各类附加信息,这就是所谓的Exif信息.Exif是一种图像文件格式 ...

  5. Python 读取显示保存图片----python skimage图像处理

    转载:https://blog.csdn.net/weixin_41500849/article/details/80366991 基于python脚本语言开发的数字图片处理包,比如PIL,Pillo ...

  6. java程序中的图片与数值关联_Java从图片中读取图片的元数据Exif信息

    一般情况下是java程序读取不到gps等扩展信息的.如果想要解析到里面的信息需要下载一个jar包,metadata-extractor-2.6.4.jar(下载地址: http://code.goog ...

  7. python读取cad图纸_DWG文件信息的读取

    在不使用任务插件的情况下读取DWG文件的缩略图,以便在没有安装AutoCAD的计算机上浏览. using System; using System.Collections.Generic; using ...

  8. python读取、保存图片的方法

    matplotlib 输入:列表或二维矩阵 (1)例如列表: #coding=utf-8 from matplotlib import pyplot as plt X = [[1,2],[3,4],[ ...

  9. python读取身份证中的生日信息

    编写程序输入一个列表,列表中的元素为身份证(18位),根据身份证号获得生日信息,说明身份证的7到10表示出生年,11到12表示出生月,13到14表示出生日. 输入: id_cards = ['3101 ...

最新文章

  1. VMware HA实战攻略之四VMware HA安装及配置
  2. OpenCV中Mat类的重载运算符operator()的用法
  3. 查看mysql表中的所有索引
  4. XJOJ - 选信封(离散化+增广路)
  5. Spring系列(十):@Autowired 和@Resource注解用法介绍
  6. leetcode 172 python
  7. teststand调用python模块_NI TestStand 2019下载-测试管理软件NI TestStand 2019下载v19.0.1 官方版-西西软件下载...
  8. 批量拷贝文件到服务器,Syncovery(数据备份工具)如何在windows下远程访问服务器批量拷贝文件?Syncovery图文教...
  9. iOS毛玻璃效果(第一次写~有点紧张喔)
  10. Android:简易计算器
  11. ViT为何引入cls_token
  12. Hyper-V 配置静态 IP
  13. mysql的default_sql语句中default是什么意思?
  14. 上位机plc编程入门_【新手入门】西门子PLC编程入门学习
  15. 如何判断app在前台还是后台
  16. jQurey实现电梯效果
  17. BERT的vocabulary字典
  18. 2021年中国能源产量及消费量情况分析:一次性能源,同比增长2.7%[图]
  19. 人力资源管理专业知识与实务(初级)【13】
  20. java单元测试测试异常_Java单元测试中出现意外异常

热门文章

  1. 《大数据》笔记 Bonferroni correction
  2. 致程序员之家论坛的所有会员
  3. 哈希消息认证码HmacSHA256-javascript版
  4. mysql、oracle、sqlserver各自的默认端口号
  5. java几个注解的作用及比较(@RestController、@Controller、@ResponseBody、@RequestBody等)
  6. Altium Designer 18 原理图编译出现off grid错误处理方法
  7. Java基础编程之分解质因数
  8. CIPP翻转内衬法整体修复技术简介
  9. dbcontext的使用
  10. 分享关于UE4中matinee工具的使用教程