Cor*_*mac 7 python exif python-imaging-library heic
这与这个问题类似,只是那里的解决方案对我不起作用。
在 Windows 资源管理器中查看 HEIC 文件,我可以看到几个日期。与我所知道的相符的是我拍摄照片的日期,标题为“日期”和“拍摄日期”。其他日期不是我想要的。
我尝试了两种方法在 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
Run Code Online (Sandbox Code Playgroud)
这适用于许多其他图像,但对于我的 HEIC 文件信息为“无”。
我找到了上面链接的问题,并尝试了那里的答案(exifread):
import exifread
with open(filename, 'rb') as image:
exif = exifread.process_file(image)
Run Code Online (Sandbox Code Playgroud)
而这里的 exif 是 None 。所以我想知道日期是否以其他方式编码在文件中,而不是 EXIF,但这两个工具似乎显示否则:
http://exif.regex.info/exif.cgi显示: EXIF 站点
所以我彻底困惑了!我可以在 Windows 资源管理器和这些工具中看到 EXIF 数据吗?如果是这样,为什么两个 Python 工具都看不到它?
谢谢你的帮助!
Windows 10、Python 2.7.16。如果相关的话,这些照片是用 iPhone XS 拍摄的。
更新:将 HEIC 文件转换为 jpg,两种方法都可以正常工作。
您可以通过shellmacOS
使用本机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)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
3463 次 |
最近记录: |