pythonexif找不到HEIC文件的拍摄日期,但它在其他工具中是可见的

2024-04-26 01:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

这与this question相似,只是那里的解决方案不适合我。在

在Windows资源管理器中查看HEIC文件时,我可以看到几个日期。与我所知道的相匹配的是我拍照的日期,标题是“日期”和“拍摄日期”。其他的约会不是我想要的。在

Image in Windows Explorer

我尝试了两种方法从Python文件中获取EXIF数据:

from PIL import Image
_EXIF_DATE_TAG = 36867

img = Image.open(fileName)
info = img._getexif()
c.debug('info is', info)
# If info != None, search for _EXIF_DATE_TAG

这适用于很多其他图像,但对于我的HEIC文件信息是没有的。在

我找到了上面链接的问题,并在那里尝试了答案(exifread):

^{pr2}$

而exif在这里没有。所以我想知道日期是否以其他方式编码在文件中,而不是EXIF,但这两个工具似乎显示的不是:

http://exif.regex.info/exif.cgi显示: EXIF Site

并且exiftool显示: exiftool

所以我完全糊涂了!我在Windows资源管理器和这些工具中看到EXIF数据了吗?如果是这样,为什么Python工具都看不到呢?在

谢谢你的帮助!在

Windows 10,Python 2.7.16。这些照片是在iphonexs上拍摄的,如果有关系的话。在

更新:将HEIC文件转换为jpg,这两种方法都能正常工作。在


Tags: 文件工具数据方法imageinfoimgdate
2条回答

这是一个HEIC文件的问题-它显然不受支持,我认为在许可方面有一些困难。在

macOS上,您可以通过shell使用本机的mdls(元数据列表,Ask Dave Taylor)从HEIC获取数据。请注意,像这样调用shell不是一个好的编程,所以要小心使用。在

import datetime
import subprocess

class DateNotFoundException(Exception):
    pass

def get_photo_date_taken(filepath):
    """Gets the date taken for a photo through a shell."""
    cmd = "mdls '%s'" % filepath
    output = subprocess.check_output(cmd, shell = True)
    lines = output.decode("ascii").split("\n")
    for l in lines:
        if "kMDItemContentCreationDate" in l:
            datetime_str = l.split("= ")[1]
            return datetime.datetime.strptime(datetime_str, "%Y-%m-%d %H:%M:%S +0000")
    raise DateNotFoundException("No EXIF date taken found for file %s" % filepath)

相关问题 更多 >