轻松提取Exif数据:用Python获取图片拍摄时间

要实现获取照片拍摄时间,你需要使用Python配合一些图片处理库来读取照片的元数据(Exif信息),其中包含拍照时间。以下是一个简单的程序示例,使用Pillow库和piexif库来读取照片的Exif信息:

首先,你需要安装Pillowpiexif库。可以通过以下命令安装:

pip install Pillow piexif

在这里插入图片描述
然后,你可以使用以下代码来提取照片的拍摄时间:

from PIL import Image
import piexif

def get_photo_time(image_path):
    # 打开图片文件
    image = Image.open(image_path)

    # 获取Exif数据
    exif_data = piexif.load(image.info['exif'])

    # 提取拍摄时间
    if piexif.ExifIFD.DateTimeOriginal in exif_data['Exif']:
        photo_time = exif_data['Exif'][piexif.ExifIFD.DateTimeOriginal]
        # 转换为可读格式
        photo_time = photo_time.decode('utf-8')
        return photo_time
    else:
        return "未找到拍照时间"

# 使用示例
image_path = 'path_to_your_image.jpg'  # 替换成你的照片路径
print("拍照时间:", get_photo_time(image_path))

代码说明:
Pillow库用于打开图片文件。
piexif库用于提取图片中的Exif元数据,Exif包含照片的拍摄时间等信息。
DateTimeOriginal是Exif信息中存储拍照时间的字段。

使用方式:
将你收到的图片下载到本地并提供正确的路径(例如:'path_to_your_image.jpg')。
运行程序后,程序会输出图片的拍摄时间(如果照片包含Exif信息)。

在这里插入图片描述
然而我这里报错,查阅了一番才知道:
这里的 image_path = 'path_to_your_image.jpg' 只是一个占位符,意思是你需要将 'path_to_your_image.jpg' 替换成你实际的图片路径。

  1. 图片路径
    假设你的照片保存在桌面上,文件名为 example.jpg,那么:

如果你使用的是 Windows,路径可能是:

image_path = 'C:\\Users\\你的用户名\\Desktop\\example.jpg'

如果你使用的是 MacOS 或 Linux,路径可能是:

image_path = '/Users/你的用户名/Desktop/example.jpg'
  1. 具体例子
    假设你下载了一张名为 vacation.jpg 的照片,并且它存放在桌面上。那么代码中的 image_path 就应该是:

Windows 示例:

image_path = 'C:\\Users\\张三\\Desktop\\vacation.jpg'

MacOS 示例:

image_path = '/Users/zhangsan/Desktop/vacation.jpg'
  1. 如果图片路径中有空格
    有时候文件路径可能会有空格,这时不要担心,Python会正常处理。比如路径是 My Photo.jpg,那也没问题,直接把路径放进去:

Windows 示例:

image_path = 'C:\\Users\\张三\\Desktop\\My Photo.jpg'

MacOS 示例:

image_path = '/Users/zhangsan/Desktop/My Photo.jpg'
  1. 如何找到图片的路径
    如果你不确定路径,通常可以:
  • 在 Windows 中,右键点击图片文件,选择“属性”并查看文件位置。
  • 在 MacOS 中,右键点击图片,选择“显示简介”来查看文件路径。

完整代码示例

假设我们用 vacation.jpg 作为示例,

路径是 C:\Users\张三\Desktop\vacation.jpg,代码会变成这样:

from PIL import Image
import piexif

def get_photo_time(image_path):
    # 打开图片文件
    image = Image.open(image_path)

    # 获取Exif数据
    exif_data = piexif.load(image.info['exif'])

    # 提取拍摄时间
    if piexif.ExifIFD.DateTimeOriginal in exif_data['Exif']:
        photo_time = exif_data['Exif'][piexif.ExifIFD.DateTimeOriginal]
        # 转换为可读格式
        photo_time = photo_time.decode('utf-8')
        return photo_time
    else:
        return "未找到拍照时间"

# 使用示例
image_path = 'C:\\Users\\张三\\Desktop\\vacation.jpg'  # 替换成实际路径
print("拍照时间:", get_photo_time(image_path))

重新输入之后又曝出另一个问题:

这个错误是因为在尝试获取图片的Exif信息时,image.info 中并没有 ‘exif’ 这个键。这通常发生在图片不包含Exif元数据时。可能的原因是图片本身没有Exif信息(有些图片没有这个数据,尤其是通过某些应用或设备拍摄的图片)。
在这里插入图片描述
解决方法:

  • 检查图片是否包含Exif信息: 在提取Exif信息前,你可以先检查图片是否包含Exif数据。我们可以使用 PIL 提供的 .getexif() 方法来进行检查,而不是直接访问 image.info['exif']

  • 修改代码以处理没有Exif数据的情况: 我们可以在代码中增加一些检查,以确保只有在Exif数据存在时才尝试读取它。

然后我的修改后就这样了

from PIL import Image
import piexif

def get_photo_time(image_path):
    # 打开图片文件
    image = Image.open(image_path)

    # 尝试获取Exif数据
    exif_data = image._getexif()

    if exif_data is not None:
        # 检查是否包含拍照时间
        if piexif.ExifIFD.DateTimeOriginal in exif_data:
            photo_time = exif_data[piexif.ExifIFD.DateTimeOriginal]
            # 转换为可读格式
            photo_time = photo_time.decode('utf-8')
            return photo_time
        else:
            return "Exif中没有拍照时间"
    else:
        return "图片没有Exif数据"

# 使用示例
image_path = r"C:\Users\86180\Desktop\4596D3FDD2A16E120696DAB3601CB5A1.png"  # 替换成实际路径
print("拍照时间:", get_photo_time(image_path))

主要修改:
1.使用 image._getexif() 方法:这个方法直接返回Exif数据(如果存在的话),而不是通过 image.info['exif'] 访问。这可以避免在没有Exif数据时抛出 KeyError 错误。
2.检查Exif数据是否存在:如果图片没有Exif数据(返回值为 None),则返回一个提示信息:“图片没有Exif数据”。
3.检查是否包含拍照时间:如果Exif数据存在,进一步检查是否包含 DateTimeOriginal 字段,这是存储拍照时间的地方。

其他注意事项:
1.不是所有图片都有Exif信息,特别是一些PNG格式的图片,因为Exif信息主要是JPEG、TIFF等格式的图片才有的。如果你确认你的图片是PNG格式,它可能没有Exif数据。这种情况下,使用image._getexif()方法会返回None。

2.如果你确定图片应该包含Exif数据,但仍然无法读取,可以考虑将图片转换为其他格式(如JPEG),并重新尝试。

运行后输出

  • 如果图片包含Exif数据并且有拍照时间,程序会显示拍照时间。
  • 如果图片没有Exif数据,程序会显示:“图片没有Exif数据”。
  • 如果Exif中没有拍照时间,程序会显示:“Exif中没有拍照时间”。

在这里插入图片描述
为什么报出这个: d:; cd ‘d:\python3\lsy\2’; & ‘D:\python3\python.exe’ ‘c:\Users\86180.vscode\extensions\ms-python.python-2021.8.1159798656\pythonFiles\lib\python\debugpy\launcher’ ‘7219’ ‘–’ ‘d:\python3\lsy\2\11.py’ 拍照时间: 图片没有Exif数据???

从错误信息来看,程序成功运行,但它返回了 “图片没有Exif数据”,这表明你提供的图片文件没有Exif元数据。

为什么会发生这个问题?

Exif数据通常存在于由数码相机、手机或其他带有拍照功能的设备拍摄的图片中,但并不是所有图片都会包含Exif信息。特别是以下几种情况可能导致图片没有Exif数据:

  • 图片格式问题:Exif数据主要存在于JPEG、TIFF格式的图片中,而PNG格式的图片通常不会包含Exif数据。如果你的图片是PNG格式,它很可能没有Exif信息。

  • 编辑过的图片:有些图片在经过处理或编辑后,可能会丢失Exif数据。如果你用某些编辑工具(如Photoshop、GIMP)编辑过图片,这些工具可能会删除Exif信息。

  • 图片来源问题:如果图片是通过某些应用或设备生成的(比如截图、从网页下载的图片等),这些图片也通常不会包含Exif数据。

解决办法:

1.检查图片格式:
确保你使用的图片是JPEG或TIFF格式。如果是PNG或者其他格式,可能确实没有Exif数据。
你可以通过查看文件的扩展名,或者使用图片查看工具查看文件格式。

2.尝试换一张JPEG图片:
如果你有一张拍摄的JPEG格式图片,可以试试用这张图片,看看程序能否成功提取Exif数据。

3.手动检查图片是否包含Exif数据:
使用图片查看工具(如Windows自带的图片查看器,或使用在线Exif查看器)检查图片是否包含Exif信息。很多图片查看器会显示Exif数据,包括拍照时间、设备型号等。

4.尝试修改图片格式:
如果你正在使用PNG格式,可以尝试将图片转换为JPEG格式(比如通过在线转换工具或Photoshop等工具)。转换为JPEG格式后,通常会保留Exif数据,尤其是拍照时间。

这里我就不展示了

如何检查Exif数据?

1.你可以通过一些在线工具来检查图片是否有Exif数据。比如:
ExifTool(提供详细的Exif信息)

2.或者使用Windows自带工具查看:右键图片文件,选择“属性” > “详细信息” 标签页,可以查看图片的Exif信息。

如果你提供的图片是PNG格式或者没有Exif数据的图片,那么程序会提示“图片没有Exif数据”。
尝试使用JPEG格式的照片,通常它们会包含Exif数据。
使用一些图片查看工具,手动检查一下图片是否包含Exif数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值