Python Pillow 简明教程

Python Pillow - Extracting Image Metadata

图片 metadata 指数字图像关联的信息。这些元数据可能包括各种详细信息,例如相机型号、拍摄日期和时间、位置信息(GPS 坐标)和关键字。

在此上下文中,提取图像元数据就是从图像中检索这些基础信息。一种广泛使用的图像元数据类型是 EXIF 数据,EXIF 是“可交换图像文件格式”的简称。此标准格式由佳能、美能达/索尼和尼康等组织建立,它封装了一组与图像相关的全面具体信息,包括相机设置、曝光参数等。

请注意,所有 EXIF 数据都是元数据,但并非所有元数据都是 EXIF 数据。EXIF 是一种特定类型的元数据,你正在寻找的数据也可能属于其他元数据类型,例如 IPTC 或 XMP 数据。

Extracting Basic Image Metadata

Python Pillow Image 对象提供了一种简单的访问基本图像元数据的方法,包括文件名、尺寸、格式、模式等。

Example

此示例演示了如何使用 Pillow 图像对象的属性从图像中提取各种基本元数据。

from PIL import Image

# Path to the image
image_path = "Images/dance-cartoon.gif"

# Read the image data using Pillow
image = Image.open(image_path)

# Access and print basic image metadata
print("Filename:", image.filename)
print("Image Size:", image.size)
print("Image Height:", image.height)
print("Image Width:", image.width)
print("Image Format:", image.format)
print("Image Mode:", image.mode)

# Check if the image is animated (for GIF images)
if hasattr(image, "is_animated"):
   print("Image is Animated:", image.is_animated)
   print("Frames in Image:", image.n_frames)
Filename: Images/dance-cartoon.gif
Image Size: (370, 300)
Image Height: 300
Image Width: 370
Image Format: GIF
Image Mode: P
Image is Animated: True
Frames in Image: 12

Extracting Advanced Image Metadata

Python Pillow 库提供工具来访问和管理图像元数据,特别是通过 Image.getexif() 函数和 ExifTags 模块。

Image.getexif() 函数从图像中检索 EXIF 数据,其中包含有关图像的大量有价值信息。使用此函数的语法如下:

Image.getexif()

该函数返回一个 Exif 对象,该对象提供对 EXIF 图像数据的读写访问。

PIL.ExifTags.TAGS 字典用于解释 EXIF 数据。此字典将 16 位整数 EXIF 标签枚举映射到易于人类理解的描述性字符串名称,使元数据更容易理解。此字典的语法如下:

PIL.ExifTags.TAGS: dict

Example

以下示例演示了如何使用 Pillow 的 getexif() 方法访问和打印图像文件的 EXIF 元数据。它还展示了如何使用 TAGS 字典将标签 ID 映射到可读的标签名称。

from PIL import Image
from PIL.ExifTags import TAGS

# The path to the image
image_path = "Images/flowers_canon.JPG"

# Open the image using the PIL library
image = Image.open(image_path)

# Extract EXIF data
exif_data = image.getexif()

# Iterate over all EXIF data fields
for tag_id, data in exif_data.items():

   # Get the tag name, instead of the tag ID
   tag_name = TAGS.get(tag_id, tag_id)
   print(f"{tag_name:25}: {data}")
GPSInfo                  : 10628
ResolutionUnit           : 2
ExifOffset               : 360
Make                     : Canon
Model                    : Canon EOS 80D
YResolution              : 72.0
Orientation              : 8
DateTime                 : 2020:10:25 15:39:08
YCbCrPositioning         : 2
Copyright                : CAMERAMAN_SAI
XResolution              : 72.0
Artist                   : CAMERAMAN_SAI