跳转到主要内容

django-exiffield 通过使用exiftool提取EXIF信息。

项目描述

django-exiffield

PyPI GitHub Workflow Status (master) Coveralls github branch PyPI - Python Version PyPI - License

django-exiffield 通过使用exiftool提取EXIF信息。

需求

  • Python 3.6.1或更高版本
  • exiftool
  • Django >= 2.2

安装

  1. 安装 django-exiffield

    pip install django-exiffield
    
  2. 确保 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
获取媒体文件的方位。可能的值是LANDSCAPEPORTRAIT

get_sequenctype -> exiffield.getters.Mode
猜测图像是否为序列拍摄。可能的值是BURSTBRACKETINGTIMELAPSESINGLE

get_sequencenumber -> int
获取图像在序列中的位置。

开发

该项目使用poetry进行打包和管理所有依赖项,以及使用pre-commit来运行flake8isortmypyblack

克隆此存储库并运行

poetry install
poetry run pre-commit install

以创建包含所有依赖项的虚拟环境。之后,您可以运行测试套件

poetry run pytest

此存储库遵循Conventional Commits风格。

Cookiecutter模板

该项目使用cruftcookiecutter-pyproject模板创建。要更新此存储库到最新模板版本,请在存储库根目录中运行

cruft update

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

django-exiffield-3.0.0.tar.gz (8.2 kB 查看哈希值)

上传时间:

构建分布

django_exiffield-3.0.0-py3-none-any.whl (7.9 kB 查看哈希值)

上传时间: Python 3

支持者