python 修改、读取图片元数据
图片元数据
图片元数据(metadata)是嵌入到图片文件中的一些标签。比较像文件属性,但是种类繁多。常见的几种标准有:
EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息。
IPTC:比如图片标题、关键字、说明、作者、版权等信息。
XMP:由Adobe公司制定标准,以XML格式保存。用PhotoShop等Adobe公司的软件制作的图片通常会携带这种信息。
修改、读取图片元数据
Exiv2
Exiv2的网站:https://www.exiv2.org/index.html
Exiv2支持的元数据列表:https://www.exiv2.org/metadata.html
Exiv2支持的图片格式:https://dev.exiv2.org/projects/exiv2/wiki/Supported_image_formats
Exiv2github链接:https://github.com/LeoHsiao1/pyexiv2
读取元数据:
>>> from pyexiv2 import Image >>> i = Image("tests/1.jpg") # 登记图片路径
>>> i.read_exif() # 读取元数据,这会返回一个字典
{'Exif.Image.DateTime': '2019:06:23 19:45:17', 'Exif.Image.Artist': 'TEST', 'Exif.Image.Rating': '', ...}
>>> i.read_iptc()
{'Iptc.Envelope.CharacterSet': '\x1b%G', 'Iptc.Application2.ObjectName': 'TEST', 'Iptc.Application2.Keywords': 'TEST', ...}
>>> i.read_xmp()
{'Xmp.dc.format': 'image/jpeg', 'Xmp.dc.rights': 'lang="x-default" TEST', 'Xmp.dc.subject': 'TEST', ...}
修改元数据:
>>> # 准备一个字典,包含你想修改的标签
>>> _dict = {"Xmp.xmp.CreateDate": "2019-06-23T19:45:17.834", # 设置这个标签的值
... "Xmp.xmp.Rating": ""} # 显式地设置一个空字符串来删除该标签
}
>>> i.modify_xmp(_dict) # 执行修改
>>> xmp_dict = i.read_xmp() # 重新读取元数据
>>> xmp_dict["Xmp.xmp.CreateDate"]
'2019-06-23T19:45:17.834' # 这个标签已经被修改了
>>> xmp_dict["Xmp.xmp.Rating"]
KeyError: 'Xmp.xmp.Rating' # 这个标签已经被删除了 # 使用 i.modify_exif() 、i.modify_iptc() 的方法同理
Piexif
五个功能:
load(filename) -以dict的形式获取exif数据。
dump(exif_dict) -以字节为单位获取exif 以使用JPEG保存。
insert(exif_bytes,filename) -将exif插入JPEG。
remove(filename) -从JPEG移除exif。
移植(文件名,文件名) -将exif从JPEG移植到JPEG。
1.Piexif不依赖任何第三个库。
2.在Python 2.7、3.3、3.4、3.5、3.6,pypy和pypy3上进行了测试。Piexif甚至可以在IronPython上运行。Piexif与操作系统无关,可以在GoogleAppEngine上运行。
批量消除图片元信息的脚本
import piexif
import sys
import os
import re def remove_all_exif(image_names):
for image_name in image_names:
try:
piexif.remove(image_name)
print(image_name,"exif信息清除完毕")
except Exception:
pass def get_images():
all_file_names = os.listdir()
image_names = list()
for file_name in all_file_names:
if re.match(r".*\.(jpg|JPG|png)",file_name):
image_names.append(file_name)
print("已经将",file_name,"添加到列表!")
else:
pass
return image_names def main():
image_names = get_images()
remove_all_exif(image_names) pass if __name__ == "__main__":
main()
参考:Python读写图片元数据(EXIF、IPTC、XMP)
python 修改、读取图片元数据的更多相关文章
- python opencv 读取图片 返回图片某像素点的b,g,r值
转载:https://blog.csdn.net/weixin_41799483/article/details/80884682 #coding=utf-8 #读取图片 返回图片某像素点的b,g ...
- python 读取图片的尺寸、分辨率
#需要安装PIL模块 #encoding=gbk#--------------------------------------------------------------------------- ...
- Python读取图片尺寸、图片格式
Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...
- Android中读取图片EXIF元数据之metadata-extractor的使用
一.引言及介绍 近期在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享. 本身工作也是常常和处理大图 ...
- 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据
所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据. 本文介绍如何使用Java代码将一张图片的隐藏信息读取出来. 首先不需要下载任何额外的Java库,用JDK自带的库就 ...
- python实现读取并显示图片的两种方法
https://www.cnblogs.com/lantingg/p/9259840.html 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片. ...
- Python中Opencv和PIL.Image读取图片的差异对比
近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的. image = np.array(Ima ...
- Python批量读取人脸图片与数据互相转换
读取部分结果 程序 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from PIL import ...
- python 将png图片格式转换生成gif动画
先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...
随机推荐
- vue 高德地图
index.html <link rel="stylesheet" href="http://cache.amap.com/lbs/static/main1119. ...
- ubuntu Tensorflow object detection API 开发环境搭建
https://blog.csdn.net/dy_guox/article/details/79111949 luo@luo-All-Series:~$ luo@luo-All-Series:~$ s ...
- Qt编写自定义控件32-等待进度条控件
一.前言 在各种各样的执行任务界面,有时候需要比较多的时间,需要给出一个直观的等待进度条表示当前正在执行的进度,而不至于懵逼在那里,用户不会觉得程序死了还是干嘛了. 等待进度条有好几种办法,比如直接叫 ...
- centos下如何关闭xdebug扩展
因为只要加载XDEBUG都会导致系统太慢,所以只有在需要调试系统程序的时候才加载XDEBUG扩展.平时一定要把它给注释掉. 只需要在php.ini文件中注释掉xdebug即可. 即: 前面加一个分号即 ...
- Scrapy五大核心组件工作流程
一.Scrapy五大核心组件工作流程 1.核心组件 # 引擎(Scrapy) 对整个系统的数据流进行处理, 触发事务(框架核心). # 调度器(Scheduler) 用来接受引擎发过来的请求. 由过滤 ...
- 知识点整理-mysql的顺序I/O和随机I/O
假设有这样一张表: CREATE TABLE `person_info` ( `id` ) NOT NULL AUTO_INCREMENT, `name` varchar() NOT NULL, `b ...
- mybatis ibatis 使用时出现 语法错误
最近在使用mybatis的时候遇到一个问题,在执行数据库分页查询的时候报语法错误,但是检查sql之后并没有发现语法错误.在反复查询各种资料后(百度搜索‘mybatis分页’),最后发现是sql语句参数 ...
- 用cmd命令加密文件夹
比如新建一个叫“大学财务”的文件夹,我希望这个文件夹下的内容是加密隐藏的. 查看的时候需要点击“大学财务.bat”这个文件,然后输入设置的密码即可. Cls @ECHO OFF title Folde ...
- 【VS开发】Return与Exit的区别
1. exit用于结束正在运行的整个程序,它将参数返回给OS,把控制权交给操作系统:而return 是退出当前函数,返回函数值,把控制权交给调用函数. 2. exit是系统调用级别,它表示一个进程的结 ...
- 基于mxgraph.js开发的流程图组件
1.fabric.js 在决定使用mxgraph.js开发流程图之前,尝试过用fabric.js来开发,结果发现并没有想象中的那么简单,而且用户体验非常差,下面是体验地址:workFlow直到遇到一个 ...