sas*_*alm 43

最终找到了答案,我需要的标签是36867:

from PIL import Image
def get_date_taken(path):
    return Image.open(path)._getexif()[36867]
Run Code Online (Sandbox Code Playgroud)

  • http://www.awaresystems.be/imaging/tiff/tifftags/privateifd/exif.html 此链接提供每个标签的值信息。 (3认同)
  • 如果图像不包含图像创建日期的EXIF信息,则会因"KeyError:36867"而崩溃. (3认同)

Ale*_*ecz 12

我喜欢使用exif-py它因为它是纯python,不需要编译/安装,并且兼容python 2.x和3.x,因此非常适合与小型便携式python应用程序捆绑.

链接:https: //github.com/ianare/exif-py

获取照片拍摄日期和时间的示例:

import exifread
with open('image.jpg', 'rb') as fh:
    tags = exifread.process_file(fh, stop_tag="EXIF DateTimeOriginal")
    dateTaken = tags["EXIF DateTimeOriginal"]
    return dateTaken
Run Code Online (Sandbox Code Playgroud)


get*_*up8 11

这在最近版本的 Pillow(我相信 6.0+)中略有改变。

他们添加了一个getexif()您应该使用的公共方法。以前的版本是私有的和实验性的 ( _getexif())。

from PIL import Image

im = Image.open('path/to/image.jpg')
exif = im.getexif()
creation_time = exif.get(36867)
Run Code Online (Sandbox Code Playgroud)

  • 注意:如果没有找到日期,`exif.get()`将返回`None`。如果找到日期,“exif.get()”会以“String”形式返回日期。要转换为日期时间,请使用“datetime.datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')”(转换代码来自 [Jason](https://stackoverflow. com/a/62077871/3357935)) (5认同)

jra*_*m91 8

ExifTags.TAGS是从标签到标签名称的映射。您可以使用它来创建标记名称到值的映射。

在这张特定的图片上,可以使用一些不同的“日期”属性(DateTimeDateTimeOriginalDateTimeDigitized)。

import json
from PIL import Image, ExifTags
from datetime import datetime

def main(filename):
    image_exif = Image.open(filename)._getexif()
    if image_exif:
        # Make a map with tag names
        exif = { ExifTags.TAGS[k]: v for k, v in image_exif.items() if k in ExifTags.TAGS and type(v) is not bytes }
        print(json.dumps(exif, indent=4))
        # Grab the date
        date_obj = datetime.strptime(exif['DateTimeOriginal'], '%Y:%m:%d %H:%M:%S')
        print(date_obj)
    else:
        print('Unable to get date from exif for %s' % filename)
Run Code Online (Sandbox Code Playgroud)

输出:

{
    "DateTimeOriginal": "2008:11:15 19:36:24",
    "DateTimeDigitized": "2008:11:15 19:36:24",
    "ColorSpace": 1,
    "ExifImageWidth": 3088,
    "SceneCaptureType": 0,
    "ExifImageHeight": 2320,
    "SubjectDistanceRange": 2,
    "ImageDescription": "               ",
    "Make": "Hewlett-Packard                ",
    "Model": "HP Photosmart R740             ",
    "Orientation": 1,
    "DateTime": "2008:11:15 19:36:24",
    ...
}
2008-11-15 19:36:24
Run Code Online (Sandbox Code Playgroud)