• 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': '4', ...}
    >>> 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)

  • 相关阅读:
    install cygwin
    Case When PK PIVOT
    SQL Server 2012 Features
    XMLHttpRequest 使用概括
    Html DOM 常用属性和方法
    Rewrite Path in Asp.Net MVC Project
    cefsharp
    线程
    ftp 相关知识集合
    数据库知识集合
  • 原文地址:https://www.cnblogs.com/-wenli/p/11585024.html
Copyright © 2020-2023  润新知