图片元数据

图片元数据(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 修改、读取图片元数据的更多相关文章

  1. python opencv 读取图片 返回图片某像素点的b,g,r值

    转载:https://blog.csdn.net/weixin_41799483/article/details/80884682 #coding=utf-8   #读取图片 返回图片某像素点的b,g ...

  2. python 读取图片的尺寸、分辨率

    #需要安装PIL模块 #encoding=gbk#--------------------------------------------------------------------------- ...

  3. Python读取图片尺寸、图片格式

    Python读取图片尺寸.图片格式 需要用到PIL模块,使用pip安装Pillow.Pillow是从PIL fork过来的Python 图片库. from PIL import Image im = ...

  4. Android中读取图片EXIF元数据之metadata-extractor的使用

    一.引言及介绍 近期在开发中用到了metadata-extractor-xxx.jar 和 xmpcore-xxx.jar这个玩意, 索性查阅大量文章了解学习,来分享分享. 本身工作也是常常和处理大图 ...

  5. 使用com.sun.imageio.plugins.png.PNGMetadata读取图片的元数据

    所谓图片元数据,就是除了我们肉眼看到的图片内容外,隐藏在这些内容背后的一些技术数据. 本文介绍如何使用Java代码将一张图片的隐藏信息读取出来. 首先不需要下载任何额外的Java库,用JDK自带的库就 ...

  6. python实现读取并显示图片的两种方法

    https://www.cnblogs.com/lantingg/p/9259840.html 在 python 中除了用 opencv,也可以用 matplotlib 和 PIL 这两个库操作图片. ...

  7. Python中Opencv和PIL.Image读取图片的差异对比

    近日,在进行深度学习进行推理的时候,发现不管怎么样都得不出正确的结果,再仔细和正确的代码进行对比了后发现原来是Python中不同的库读取的图片数组是有差异的. image = np.array(Ima ...

  8. Python批量读取人脸图片与数据互相转换

    读取部分结果 程序 # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt from PIL import ...

  9. python 将png图片格式转换生成gif动画

    先看知乎上面的一个连接 用Python写过哪些[脑洞大开]的小工具? https://www.zhihu.com/question/33646570/answer/157806339 这个哥们通过爬气 ...

随机推荐

  1. Eclipse项目修改编译jdk版本(Failed to read candidate component class: file 处理)

    转: Failed to read candidate component class: file 处理 2018年03月09日 07:15:54 爱萨萨 阅读数 10041   出错现象: org. ...

  2. openpose关节图

  3. list列表转tree树方法

    list转tree递归转换 /** * 递归遍历节点 * @param sourceList * @param parentCode * @return */ public List<Offic ...

  4. TCP为什么要三次握手?

    在<计算机网络>一书中其中有提到,三次握手的目的是“为了防止已经失效的连接请求报文段突然又传到服务端,因而产生错误”,这种情况是: 一端(client)A发出去的第一个连接请求报文并没有丢 ...

  5. 关于LuckyE博客的前言

    第一次开始尝试怎么写博客,也不知道写点什么好...... 开始写博客的原因其实很多,主要原因是因为最近考出cisp-pte证书,然后前几天电话面试某比较有名的安全公司(x盟)的渗透测试工程师实习生被撸 ...

  6. cvpr2015papers

    @http://www-cs-faculty.stanford.edu/people/karpathy/cvpr2015papers/ CVPR 2015 papers (in nicer forma ...

  7. VS.2017下载安装_ZC

    ZC:20190623 1.我现在下载的是 社区版 C++的桌面开发 和 C#的开发,下载 文件压缩为:移动硬盘“H:\ZC_IDE\VC\vs2017_cs_cpp(community).rar” ...

  8. oracle服务器硬盘磁盘空间满了

    问题描述:oracle服务器硬盘磁盘空间满了,没有空间写入数据: 解决思路: a.服务器是虚拟机还是实体机? 虚拟机,->物理机上有空间直接给它扩容,再给数据库的相关表空间添加文件就可: 实体机 ...

  9. Django之session详解

    好文章来自追风的小蚂蚁:https://www.cnblogs.com/zhuifeng-mayi/p/9099811.html cookie:Cookie,有时也用其复数形式 Cookies,指某些 ...

  10. UWP笔记-边框背景虚化效果

    这是一个简单的UI外观 1.添加Negut包: Microsoft.Toolkit.Uwp.UI.Controls 2.xaml:命名空间中引用 xmlns:controls="using: ...