Python 从 EXIF 数据中使用 PIL 获取照片拍摄的日期和时间

Python 从 EXIF 数据中使用 PIL 获取照片拍摄的日期和时间

在本文中,我们将介绍如何使用Python中的PIL库从照片的EXIF数据中获取拍摄日期和时间。EXIF(Exchangeable Image File Format)是嵌入在数字图片文件中的元数据,其中包含拍摄照片的时间、相机型号、ISO感光度以及其他相关信息。

阅读更多:Python 教程

1. 安装PIL库

在我们开始之前,首先需要确保已经在Python环境中安装了PIL库。可以使用以下命令进行安装:

pip install Pillow
Python

安装完成后,我们可以导入PIL库以供后续使用:

from PIL import Image
Python

2. 打开照片并获取EXIF数据

首先,我们需要打开待处理的照片,并获取其EXIF数据。PIL库的Image模块提供了一个open()函数用于打开照片文件。我们可以通过传入照片文件的路径作为参数来打开照片:

image_path = 'photo.jpg'
image = Image.open(image_path)
Python

获取到的image对象代表了打开的照片。接下来,我们可以使用_getexif()方法获取照片的EXIF数据:

exif_data = image._getexif()
Python

注意,_getexif()方法返回的是一个包含EXIF数据的字典,如果照片没有EXIF数据,则返回None

3. 解析EXIF数据

获得EXIF数据后,我们需要对其进行解析以获取我们感兴趣的信息。在这个例子中,我们将专注于获取照片的拍摄日期和时间。

EXIF数据是一个由标签和数值组成的键值对集合。每个键都对应着一个特定的标签,而数值则是该标签对应的值。通过查找相应的标签,我们可以获取到拍摄日期和时间的值。

在Python中,标签与其对应的ID之间存在着映射关系。PIL库定义了一些常量,这些常量可以用于从EXIF数据中获取特定标签的值。

from PIL.ExifTags import TAGS

# 标签ID对应拍摄日期和时间的常量
DATE_TIME_ORIGINAL = 36867
Python

接下来,我们可以通过迭代EXIF数据的键值对,找到我们需要的标签,并获取其对应的数值。

for tag_id, value in exif_data.items():
    tag_name = TAGS.get(tag_id, tag_id)
    if tag_name == 'DateTimeOriginal':
        print('拍摄日期和时间:', value)
        break
Python

在上述代码中,我们遍历了EXIF数据的键值对,将键映射为标签名。如果找到了标签名为’DateTimeOriginal’,则输出对应数值。值得注意的是,有些照片的标签名可能不是直接的英文形式,需要在TAGS.get()函数中添加映射关系。

4. 完整示例

下面是一个完整的示例,演示了如何从照片的EXIF数据中获取拍摄日期和时间:

from PIL import Image
from PIL.ExifTags import TAGS

def get_datetime_original(image_path):
    image = Image.open(image_path)
    exif_data = image._getexif()

    if exif_data is None:
        return None

    for tag_id, value in exif_data.items():
        tag_name = TAGS.get(tag_id, tag_id)
        if tag_name == 'DateTimeOriginal':
            return value

    return None

photo_path = 'photo.jpg'
datetime_original = get_datetime_original(photo_path)
if datetime_original:
    print('拍摄日期和时间:', datetime_original)
else:
    print('未找到拍摄日期和时间信息')
Python

总结

本文介绍了如何使用Python中的PIL库从照片的EXIF数据中获取拍摄日期和时间。我们首先使用PIL库打开照片,并通过_getexif()方法获取照片的EXIF数据。然后,通过解析EXIF数据中的标签和数值,我们找到了拍摄日期和时间的值。希望这篇文章对你理解和使用PIL库获取照片的拍摄日期和时间有所帮助。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册