从 tiff 和 jpeg 文件中读取 Exif 元数据。
项目描述
易于使用的 Python 模块从数字图像文件中提取 Exif 元数据。
支持的格式:TIFF、JPEG、PNG、Webp、HEIC
兼容性
EXIF.py 在 Python 3.5 到 3.10 上经过测试并得到官方支持
从版本3.0.0 开始,完全放弃了 Python2 兼容性(由于类型提示导致的语法错误)。
安装
稳定版
推荐的过程是安装PyPI 包,因为它可以轻松保持最新状态:
$ pip install exifread
有关更多信息,请参阅pip 文档。
EXIF.py 是成熟的软件,力求稳定。
开发版
克隆 repo 后,使用提供的 Makefile:
make venv reqs-install
它将安装虚拟环境并安装开发依赖项。
用法
命令行
一些例子:
EXIF.py image1.jpg EXIF.py -dc image1.jpg image2.tiff find ~/Pictures -name "*.jpg" -o -name "*.tiff" | xargs EXIF.py
显示命令行选项:
EXIF.py -h
Python 脚本
import exifread
# Open image file for reading (must be in binary mode)
f = open(path_name, 'rb')
# Return Exif tags
tags = exifread.process_file(f)
注意:要在项目中将此库用作 Git 子模块,您应该:
from <submodule_folder> import exifread
返回的标签将是一个字典,将 Exif 标签的名称映射到它们在 path_name 命名的文件中的值。您可以根据需要处理标签。特别是,您可以使用以下命令遍历所有标签:
for tag in tags.keys():
if tag not in ('JPEGThumbnail', 'TIFFThumbnail', 'Filename', 'EXIF MakerNote'):
print "Key: %s, value %s" % (tag, tags[tag])
if语句用于避免打印出一些往往很长或很无聊的标签。
标签字典将包括所有常用 Exif 标签的键,还将包括一些相机使用的 Makernotes 的键,我们对此有很好的规范。
请注意,字典键是 IFD 名称后跟标签名称。例如:
'EXIF DateTimeOriginal', 'Image Orientation', 'MakerNote FocusMode'
标签说明
标签分为以下主要类别:
Image:与主图像相关的信息(Exif 数据的 IFD0)。
缩略图:与缩略图相关的信息(如果存在)(Exif 数据的 IFD1)。
EXIF:Exif 信息(子 IFD)。
GPS:GPS 信息(子 IFD)。
互操作性:互操作性信息(子 IFD)。
MakerNote:制造商特定信息。这些标签没有官方发布的参考资料。
处理选项
这些选项既可以在命令行模式下使用,也可以在脚本中使用。
更快的处理
不要处理 makernote 标签,不要提取缩略图(如果有)。
传递-q或--quick命令行参数,或作为:
tags = exifread.process_file(f, details=False)
仅处理 makernotes,而不提取缩略图(如果有):
tags = exifread.process_file(f, details=True, extract_thumbnail=False)
停在给定的标签
在检索到指定标记后停止处理文件。
传递-t TAG或--stop-tag TAG参数,或作为:
tags = exifread.process_file(f, stop_tag='TAG')
其中TAG是有效的标签名称,例如'DateTimeOriginal'。
上述两个选项对于加快处理大量文件很有用。
严格处理
在无效标签上返回错误,而不是默默地忽略。
传递-s或--strict参数,或作为:
tags = exifread.process_file(f, strict=True)
使用示例
这个例子展示了如何使用库在显示图像之前校正图像的方向(使用 Pillow 进行转换)。
import exifread
from PIL import Image
import logging
def _read_img_and_correct_exif_orientation(path):
im = Image.open(path)
tags = {}
with open(path, 'rb') as f:
tags = exifread.process_file(f, details=False)
if "Image Orientation" in tags.keys():
orientation = tags["Image Orientation"]
logging.basicConfig(level=logging.DEBUG)
logging.debug("Orientation: %s (%s)", orientation, orientation.values)
val = orientation.values
if 2 in val:
val += [4, 3]
if 5 in val:
val += [4, 6]
if 7 in val:
val += [4, 8]
if 3 in val:
logging.debug("Rotating by 180 degrees.")
im = im.transpose(Image.ROTATE_180)
if 4 in val:
logging.debug("Mirroring horizontally.")
im = im.transpose(Image.FLIP_TOP_BOTTOM)
if 6 in val:
logging.debug("Rotating by 270 degrees.")
im = im.transpose(Image.ROTATE_270)
if 8 in val:
logging.debug("Rotating by 90 degrees.")
im = im.transpose(Image.ROTATE_90)
return im
信用
非常感谢多年来所有的贡献者!
最初由 Gene Cash 和 Thierry Bousch 撰写。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
ODMExifRead -3.0.4.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | 11a534d7b4e80ae9d8c9c6c5b03e6c92ca103990164350408c62138530e19f5f |
|
| MD5 | 53d285eb1ad3f47961c710593c7da8ae |
|
| 布莱克2-256 | 9472966e547989244ecc74f6c4dbd7ffa64313933f7581ca8f7cfa89fa6ab94c |
ODMExifRead -3.0.4-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | fde70a8ef6a3e2bd88fcbdef0ea3bda30812fbf6e967bfb927005033fa3ba16b |
|
| MD5 | 9e3f2cd8ed7baf836c16febfa453a4d8 |
|
| 布莱克2-256 | 64a005bf31a8d28712d50d5aa39a8480fcb55334a9a83cc5f77200987b5df835 |