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