django-exiffield extracts exif information by utilizing exiftool.
Project description
django-exiffield extracts exif information by utilizing exiftool.
Requirements
Python 3.6
Django >= 1.8
Installation
Install django-exiffield
pip install django-exiffield
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
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0a3733ce168e4ee18dce4abc36acb3e80d4e5c09b9f1673e4b1502874d964dde |
|
MD5 | 15b24cfe7ece52e1f94ea5d3489ce568 |
|
BLAKE2b-256 | 8840cbd4d2f8e389394f28c7afda1c4131182ac5405f1b7fda6a66fdd3f9b468 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 191a6b5ff5aa1aa50ff58b62e1daaea280a17b6049e3886f47bd18f1a144b722 |
|
MD5 | 1bc093c44704d09d10bc2789ada1a9ae |
|
BLAKE2b-256 | 3fdcf9c15d19dea3a4da253ec7ad1ef4ecf1e5c11d95c74c8e87a63d5d8f1916 |