使用PIL从EXIF数据获取照片拍摄的日期和时间
问题的出现原因是Pillow库的版本更新,新版本中添加了一个公共方法getexif()
用于获取图片的EXIF数据,而之前的版本中的方法_getexif()
是私有的和实验性的。因此,使用旧版本的代码可能会导致错误。
解决方法是使用新版本的Pillow库,并使用getexif()
方法来获取图片的EXIF数据。然后可以通过exif.get(36867)
来获取图片的拍摄时间。
需要注意的是,如果图片中没有找到日期信息,exif.get()
方法会返回None
。如果找到了日期信息,exif.get()
会以字符串的形式返回日期。如果需要将其转换为datetime类型,可以使用datetime.datetime.strptime(date_str, '%Y:%m:%d %H:%M:%S')
方法进行转换。
下面是示例代码:
from PIL import Image im = Image.open('path/to/image.jpg') exif = im.getexif() creation_time = exif.get(36867)
感谢Jason提供的日期转换代码。
从上述内容中可以看出,问题的出现是因为作者想要从照片的EXIF数据中获取拍摄日期和时间。作者提到了一个名为exif-py的库,该库是纯Python编写的,不需要编译/安装,并且适用于Python 2.x和3.x,非常适合与小型便携式Python应用程序捆绑使用。
为了解决这个问题,作者给出了使用exif-py库的示例代码。代码中首先导入exifread库,然后使用open函数打开照片文件,通过exifread库的process_file函数处理该文件,并指定stop_tag参数为"EXIF DateTimeOriginal"以获取照片的拍摄日期和时间信息。最后将获取到的日期和时间信息存储在dateTaken变量中并返回。
根据这个例子,我们可以使用exif-py库来获取照片的拍摄日期和时间信息。首先需要安装exif-py库,可以通过以下命令使用pip进行安装:
pip install exif-py
安装完成后,可以使用以下代码获取照片的拍摄日期和时间信息:
import exifread with open('照片.jpg', 'rb') as fh: tags = exifread.process_file(fh, stop_tag="EXIF DateTimeOriginal") dateTaken = tags["EXIF DateTimeOriginal"] print(dateTaken)
以上代码中,需要将'照片.jpg'替换为实际的照片文件路径。执行代码后,将会输出照片的拍摄日期和时间信息。
通过上述方法,我们可以方便地从照片的EXIF数据中获取拍摄日期和时间信息,为后续的照片管理和处理工作提供了便利。
问题的出现原因是想要从照片的EXIF数据中获取拍摄日期和时间,但不清楚具体的标签和方法。
解决方法是通过使用Python的PIL库来读取照片的EXIF数据,并从中提取出拍摄日期和时间。首先需要安装PIL库,然后使用以下代码来获取拍摄日期和时间:
from PIL import Image def get_date_taken(path): exif = Image.open(path)._getexif() if not exif: raise Exception('Image {0} does not have EXIF data.'.format(path)) return exif[36867]
其中,36867是表示拍摄日期和时间的标签。
这个方法在旧的"PIL"和新的"Pillow"分支上都适用。
另外,还可以使用GExiv2库来获取照片的EXIF数据,具体方法可以参考coreygoldberg.blogspot.com/2014/01/…。
需要注意的是,如果照片不包含拍摄日期和时间的EXIF信息,以上方法中的代码会引发"KeyError: 36867"错误。