如何在Python中提取图像元数据

如何在Python中提取图像元数据

元数据是指关于数据的数据。就图像而言,元数据意味着关于图像及其制作的细节。有些元数据是由采集设备自动生成的。

图像元数据所包含的一些细节如下。

  • Height
  • Width
  • 日期和时间
  • 模型等。

Python有PIL库,它使从图像中提取元数据的任务变得非常容易,而且只需使用几行。

步骤:

  • 导入pillow模块。
  • 加载图像
  • 获取元数据。如此获得的元数据
  • 将其转换为人类可读的形式

有许多类型的元数据,但在这里我们只关注Exif元数据。

使用Exif来提取图像元数据

这些元数据通常由相机和其他捕获设备创建,包括关于图像及其捕获方法的技术信息,如曝光设置、捕获时间、GPS位置信息和相机型号。

为此,我使用了这张图片(链接如下),以确保无论你使用什么图片,它都应该有一些EXIF类型的元数据,大多数捕获设备都有EXIF数据。

https://drive.google.com/file/d/1z2RaRvzC8Cd8oxD8pZJu2U0rpRr8tbwV/view

实现:

  • 导入模块。
  • 加载图像并提取exif数据。
  • 将exif标签ID(代码中以tagid表示)转换成人类可读的形式,代码中以tagname表示,并获得其各自的值。

用pillow从图像中提取元数据的应用:下面的脚本实现了上述方法

from PIL import Image
from PIL.ExifTags import TAGS
 
# open the image
image = Image.open("img.jpg")
 
# extracting the exif metadata
exifdata = image.getexif()
 
# looping through all the tags present in exifdata
for tagid in exifdata:
     
    # getting the tag name instead of tag id
    tagname = TAGS.get(tagid, tagid)
 
    # passing the tagid to get its respective value
    value = exifdata.get(tagid)
   
    # printing the final result
    print(f"{tagname:25}: {value}")

输出:

如何在Python中提取图像元数据?

使用子进程提取图像元数据

在这里,我们使用子进程模块来提取图像元数据,使用popen()方法,从一个命令中打开一个管道。这个管道允许该命令将其输出发送到另一个命令。我们将获取的元数据存储到一个字典中。

import subprocess
 
imgPath = "C:\\Users\\DELL\\Downloads\\output.jpg"
exeProcess = "hachoir-metadata"
process = subprocess.Popen([exeProcess,imgPath],
                           stdout=subprocess.PIPE,
                           stderr=subprocess.STDOUT,
                           universal_newlines=True)
Dic={}
 
for tag in process.stdout:
        line = tag.strip().split(':')
        Dic[line[0].strip()] = line[-1].strip()
 
for k,v in Dic.items():
    print(k,':', v)

输出:

如何在Python中提取图像元数据?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Python pil