django-exiffield利用exiftool提取exif信息。
django-exiffield的Python项目详细描述
要求
- exiftool
- python 3.6
- django>;=1.8
安装
- < < > >安装Django
确保exiftool可从您的环境中执行。
pip install django-exiffield
集成
假设我们有一个带有单个ImageField的图像模型。 若要提取附加图像的EXIF信息,请添加^ {TT4}$, 在source参数中指定ImageField的名称
from django.db import models from exiffield.fields import ExifField class Image(models.Model): image = models.ImageField() exif = ExifField( source='image', )
并为新字段创建迁移。 就这样。
在将图像附加到您的{tT3}$之后,存储ExIF信息 作为ExifField上的dict。 字典中的每个EXIF信息由两个键组成:
- desc:人类可读的描述
- val:条目的值。
在下面的示例中,我们访问相机型号
image = Image.objects.get(...) print(image.exif['Model']) # { # 'desc': 'Camera Model Name', # 'val': 'DMC-GX7', # }
当EXIF信息以简单的^ {TT8}$编码时,您可以迭代和访问。 所有熟悉字典方法的值。
非规范化字段
由于ExifField只将其数据存储为文本,因此无法筛选 或者有效地获取个人价值。 ExifField提供了使用 参数denormalized_fields。 它接受一个以目标字段为键的字典和一个简单的getter函数 键入Callable[[Dict[Dict[str,str]]], Any]。 要取消对简单值的规范化,可以使用提供的exiffield.getters.exifgetter
from django.db import models from exiffield.fields import ExifField from exiffield.getters import exifgetter class Image(models.Model): image = models.ImageField() camera = models.CharField( editable=False, max_length=100, ) exif = ExifField( source='image', denormalized_fields={ 'camera': exifgetter('Model'), }, )
在exiffield.getters:
中有更多预定义的getter- exifgetter(exif_key: str) -> str < DD>获取未修改的ExIF值。< /DD>
- get_type() -> str
- 获取文件类型,例如视频或图像
- get_datetake -> Optional[datetime]
- 当文件创建为datetime 时获取
- get_orientation -> exiffield.getters.Orientation
- 获取媒体文件的方向。 可能的值是LANDSCAPE和PORTRAIT。
- get_sequenctype -> exiffield.getters.Mode
- 猜测图像是否按顺序拍摄。 可能的值是BURST、BRACKETING、TIMELAPSE和SINGLE。
- get_sequencenumber -> int
- 获取序列中的图像位置。
开发
此项目使用poetry来管理所有开发依赖项。 克隆此存储库并运行
poetry develop
创建具有所有依赖项的虚拟环境。 现在您可以使用
poetry run pytest
这个存储库遵循angular commit conventions。 您可以注册一个预提交挂钩,通过使用 husky。如果 您已经安装了nodejs。只需运行
npm install
并且预提交钩子将被注册。