Skip to main content

django-exiffield extracts exif information by utilizing exiftool.

Project description

https://img.shields.io/pypi/v/django-exiffield.svg Build Status Coverage https://img.shields.io/pypi/pyversions/django-exiffield.svg https://img.shields.io/pypi/status/django-exiffield.svg https://img.shields.io/pypi/l/django-exiffield.svg

django-exiffield extracts exif information by utilizing exiftool.

Requirements

Installation

  1. Install django-exiffield

    pip install django-exiffield
  2. Make sure exiftool is executable from you environment.

Integration

Let’s assume we have an image Model with a single ImageField. To extract exif information for an attached image, add an ExifField, specify the name of the ImageField in the source argument

from django.db import models

from exiffield.fields import ExifField


class Image(models.Model):
    image = models.ImageField()
    exif = ExifField(
        source='image',
    )

and create a migration for the new field. That’s it.

After attaching an image to your ImageField, the exif information is stored as a dict on the ExifField. Each exif information of the dictionary consists of two keys:

  • desc: A human readable description

  • val: The value for the entry.

In the following example we access the camera model

image = Image.objects.get(...)
print(image.exif['Model'])
# {
#     'desc': 'Camera Model Name',
#     'val': 'DMC-GX7',
# }

As the exif information is encoded in a simple dict you can iterate and access the values with all familiar dictionary methods.

Denormalizing Fields

Since the ExifField stores its data simply as text, it is not possible to filter or access indiviual values efficiently. The ExifField provides a convinient way to denormalize certain values using the denormalized_fields argument. It takes a dictionary with the target field as key and a simple getter function of type Callable[[Dict[Dict[str, str]]], Any]. To denormalize a simple value you can use the provided 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'),
        },
    )

There are more predefined getters in exiffield.getters:

exifgetter(exif_key: str) -> str

Get an unmodified exif value.

get_type() -> str

Get file type, e.g. video or image

get_datetaken -> Optional[datetime]

Get when the file was created as datetime

get_orientation -> exiffield.getters.Orientation

Get orientation of media file. Possible values are LANDSCAPE and PORTRAIT.

get_sequenctype -> exiffield.getters.Mode

Guess if the image was taken in a sequence. Possible values are BURST, BRACKETING, TIMELAPSE and SINGLE.

get_sequencenumber -> int

Get image position in a sequence.

Development

This project is using poetry to manage all dev dependencies. Clone this repository and run

poetry install

to create a virtual enviroment with all dependencies. You can now run the test suite using

poetry run pytest

To register the pre-commit hook, please run

poetry run pre-commit install

This repository follows the conventional commits convention.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-exiffield-2.1.0.tar.gz (7.9 kB view details)

Uploaded Source

Built Distribution

django_exiffield-2.1.0-py3-none-any.whl (7.7 kB view details)

Uploaded Python 3

File details

Details for the file django-exiffield-2.1.0.tar.gz.

File metadata

  • Download URL: django-exiffield-2.1.0.tar.gz
  • Upload date:
  • Size: 7.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.17 CPython/3.7.4 Linux/5.3.11-arch1-1

File hashes

Hashes for django-exiffield-2.1.0.tar.gz
Algorithm Hash digest
SHA256 0a3733ce168e4ee18dce4abc36acb3e80d4e5c09b9f1673e4b1502874d964dde
MD5 15b24cfe7ece52e1f94ea5d3489ce568
BLAKE2b-256 8840cbd4d2f8e389394f28c7afda1c4131182ac5405f1b7fda6a66fdd3f9b468

See more details on using hashes here.

File details

Details for the file django_exiffield-2.1.0-py3-none-any.whl.

File metadata

  • Download URL: django_exiffield-2.1.0-py3-none-any.whl
  • Upload date:
  • Size: 7.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/0.12.17 CPython/3.7.4 Linux/5.3.11-arch1-1

File hashes

Hashes for django_exiffield-2.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 191a6b5ff5aa1aa50ff58b62e1daaea280a17b6049e3886f47bd18f1a144b722
MD5 1bc093c44704d09d10bc2789ada1a9ae
BLAKE2b-256 3fdcf9c15d19dea3a4da253ec7ad1ef4ecf1e5c11d95c74c8e87a63d5d8f1916

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page