django-exiffield 通过使用exiftool提取EXIF信息。
项目描述
django-exiffield
django-exiffield 通过使用exiftool提取EXIF信息。
需求
- Python 3.6.1或更高版本
- exiftool
- Django >= 2.2
安装
-
安装 django-exiffield
pip install django-exiffield
-
确保
exiftool
可以从您的环境中执行。
集成
假设我们有一个包含单个 ImageField
的图像模型。要为附加的图像提取EXIF信息,添加一个 ExifField
,在 source
参数中指定 ImageField
的名称
from django.db import models
from exiffield.fields import ExifField
class Image(models.Model):
image = models.ImageField()
exif = ExifField(
source='image',
)
并为新字段创建迁移。就是这样。
将图像附加到您的 ImageField
后,EXIF信息作为 dict
存储在 ExifField
上。字典中的每个EXIF信息由两个键组成
desc
: 可读的人类描述val
: 条目的值。
在下面的示例中,我们访问相机型号
image = Image.objects.get(...)
print(image.exif['Model'])
# {
# 'desc': 'Camera Model Name',
# 'val': 'DMC-GX7',
# }
由于EXIF信息编码在简单的 dict
中,您可以使用所有熟悉的字典方法迭代和访问值。
去规范化字段
由于ExifField
只是简单地将数据存储为文本,因此无法有效地过滤或访问单个值。使用denormalized_fields
参数,ExifField
提供了一个方便的方法来解耦某些值。它接受一个字典,以目标字段作为键,一个类型为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
中还有更多预定义的获取函数。
exifgetter(exif_key: str) -> str
获取未修改的EXIF值。
get_type() -> str
获取文件类型,例如视频或图像
get_datetaken -> Optional[datetime]
获取文件创建时间作为datetime
get_orientation -> exiffield.getters.Orientation
获取媒体文件的方位。可能的值是LANDSCAPE
和PORTRAIT
。
get_sequenctype -> exiffield.getters.Mode
猜测图像是否为序列拍摄。可能的值是BURST
、BRACKETING
、TIMELAPSE
和SINGLE
。
get_sequencenumber -> int
获取图像在序列中的位置。
开发
该项目使用poetry进行打包和管理所有依赖项,以及使用pre-commit来运行flake8、isort、mypy和black。
克隆此存储库并运行
poetry install
poetry run pre-commit install
以创建包含所有依赖项的虚拟环境。之后,您可以运行测试套件
poetry run pytest
此存储库遵循Conventional Commits风格。
Cookiecutter模板
该项目使用cruft和cookiecutter-pyproject模板创建。要更新此存储库到最新模板版本,请在存储库根目录中运行
cruft update
。
项目详情
django-exiffield-3.0.0.tar.gz的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 969c1c081e5a12004332e0f31da969914edcf543a54ee5588546a0296b02e9bb |
|
MD5 | 0ea2ec1f80d48667ea5e09cd985e1bf1 |
|
BLAKE2b-256 | 156f777cada4f064598efa4f596321b2f5519170fff69c1a765388f8ea8bc489 |