sas*_*alm 26 python exif python-imaging-library
我可以使用PIL 从图像中获取EXIF数据,但是如何获取照片的拍摄日期和时间?
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)
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)
ExifTags.TAGS是从标签到标签名称的映射。您可以使用它来创建标记名称到值的映射。
在这张特定的图片上,可以使用一些不同的“日期”属性(DateTime、DateTimeOriginal、DateTimeDigitized)。
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)
| 归档时间: |
|
| 查看次数: |
25350 次 |
| 最近记录: |