django-exiffield利用exiftool提取exif信息。

django-exiffield的Python项目详细描述


https://img.shields.io/pypi/v/django-exiffield.svgBuild StatusCoveragehttps://img.shields.io/pypi/pyversions/django-exiffield.svghttps://img.shields.io/pypi/status/django-exiffield.svghttps://img.shields.io/pypi/l/django-exiffield.svg Django通过使用$ $ }提取未分类的信息。

要求

安装

    < < > >安装Django
    pip install django-exiffield
    
  1. 确保exiftool可从您的环境中执行。

集成

假设我们有一个带有单个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
获取媒体文件的方向。 可能的值是LANDSCAPEPORTRAIT
get_sequenctype -> exiffield.getters.Mode
猜测图像是否按顺序拍摄。 可能的值是BURSTBRACKETINGTIMELAPSESINGLE
get_sequencenumber -> int
获取序列中的图像位置。

开发

此项目使用poetry来管理所有开发依赖项。 克隆此存储库并运行

poetry develop

创建具有所有依赖项的虚拟环境。 现在您可以使用

poetry run pytest

这个存储库遵循angular commit conventions。 您可以注册一个预提交挂钩,通过使用 husky。如果 您已经安装了nodejs。只需运行

npm install

并且预提交钩子将被注册。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么只为字符数组重载println方法,而不为字符串、整数等其他数组重载?   java将快速线程返回到池中,而不是等待慢速线程   创建jar文件时java SwingWorker不工作   java如何将依赖注入RabbitListener   java如何在gradle任务中通过scp复制目录?   java在MySql数据库中创建表时,遇到NullPointerException   java HTTP Status 500 Servlet执行引发异常   在JAVA中对arraylist使用继承时出错   java PowerMockito未完成存根异常   如果没有错误/警告增加到某个极限,java是否停止在eclipse中构建项目或使用maven?   java Robolectric如何测试DateFormat。getBestDateTimePattern()   google云平台GCP数据存储Java API,构建一个空值实体   VerifyListener和FocusListener之间的java冲突   安卓是否可以在Java中的另一个方法内部强制调用一个方法?   JavaWindows7、JDK1.8、SpringBoot应用程序JAR在方法安全性方面占用了大量时间。getProviders()返回   Bean提供程序的java错误消息   java Slick动画每帧必须有一个持续时间   java无法在Trie中设置isLeaf标志   java为什么JVM不能创建包含main方法的类的对象,以便从该类访问main方法,如果它具有该类的名称?   java Apache Camel+CXF端点身份验证