A simple Django app to manage image/photo thumbnails. Supports remote/cloud storage systems like Amazon S3.
Project description
Design:
Uses Django Storage API
Uses flexible meta data store. Supports DB and Redis backend.
Installation
Add thumbnails to INSTALLED_APPS in settings.py.
Run python manage.py migrate to create database metadata backend.
Usage
settings.py:
THUMBNAILS = {
'METADATA': {
'BACKEND': 'thumbnails.backends.metadata.DatabaseBackend',
},
'STORAGE': {
'BACKEND': 'django.core.files.storage.FileSystemStorage',
# You can also use Amazon S3 or any other Django storage backends
}
'SIZES': {
'small': {
'PROCESSORS': [
{'PATH': 'thumbnails.processors.resize', 'width': 10, 'height': 10},
{'PATH': 'thumbnails.processors.crop', 'width': 80, 'height': 80}
],
'POST_PROCESSORS': [
{
'processor': 'thumbnails.post_processors.optimize',
'png_command': 'optipng -force -o7 "%(filename)s"',
'jpg_command': 'jpegoptim -f --strip-all "%(filename)s"',
},
],
},
'large': {
'PROCESSORS': [
{'PATH': 'thumbnails.processors.resize', 'width': 20, 'height': 20},
{'PATH': 'thumbnails.processors.flip', 'direction': 'horizontal'}
],
}
}
}
If you prefer to use Redis as your metadata storage backend (like I do :):
THUMBNAILS = {
'METADATA': {
'PREFIX': 'thumbs',
'BACKEND': 'thumbnails.backends.metadata.RedisBackend',
'db': 2,
'port': 6379,
'host': 'localhost',
},
}
In python:
from thumbnails.fields import ImageField
class Food(models.Model):
image = ImageField()
food = Food.objects.latest('id')
food.image.thumbnails.all()
food.image.thumbnails.small # Generates "small" sized thumbnail
food.image.thumbnails.large # Generates "large" sized thumbnail
food.image.thumbnails.small.url # Returns "small" sized thumbnail URL
django-thumbnails comes with a few builtin image processors:
# To use the following processors, put the arguments of processors in SIZES definition thumbnails.processors.resize(width, height) thumbnails.processors.rotate(degrees) thumbnails.processors.flip(direction) thumbnails.processors.crop(width, height, center) Processors are applied sequentially in the same order of definition.
Performance
If you need to fetch multiple thumbnails at once, use fetch function for better performance. fetch uses Redis pipeline to retrieve thumbnail metadata in one go, avoiding multiple round trips to Redis.
from thumbnails.field import fetch_thumbnails
food_a = Food.objects.get(id=1)
food_b = Food.objects.get(id=2)
fetch_thumbnails([food_a.image, food_b.image], ['small', 'large'])
This way, when we get thumbnails like thumbnail1.size_small or even thumbnail1.all() we won’t query to redis anymore. This feature is currently only available for RedisBackend.
Management Commands
If you changed your size definition and want to regenerate the thumbnails, use:
python manage.py delete_thumbnails --model=app.Model --size=thumbnail_size_to_delete
Running Tests
To run tests:
`which django-admin.py` test thumbnails --settings=thumbnails.tests.settings --pythonpath=.
Changelog
Version 0.3.1
Fixed fetch_thumbnails() bug. Thanks @marsha97!
Version 0.3.0
Added fetch_thumbnails() command to fetch multiple thumbnail metadata from Redis. Thanks @marsha97!
Version 0.2.2
Fixed RedisBackend.get_thumbnail() bug that may cause excessive trips to Redis. Thanks @marsha97!
Version 0.2.1
Add support for Django 1.11, 2.0 and 2.1
Version 0.2.0
Improves performance on fields that have a large number of thumbnails
Add support for Django 1.8, 1.9 and 1.10
Version 0.1.3
Fixes deprecation warning in Django 1.8
Version 0.1.2
Fixes deprecation warning in Django 1.8
Version 0.1.1
Use shortuuid instead of uuid4() to be more space efficient
Version 0.1.0
First public release
As of February 2015, this library is suitable for production use and has been used for more than a year in Stamps, an Indonesian based CRM/loyalty system.
Project details
Release history Release notifications | RSS feed
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-thumbnails-0.3.1.tar.gz
.
File metadata
- Download URL: django-thumbnails-0.3.1.tar.gz
- Upload date:
- Size: 16.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | e768a36c85d0a7bd530e184211bd6d43e323cc62828773d8fe5aa7f8c44bc87a |
|
MD5 | 7a8f8bc064b0faa04ba67f32d2c18f82 |
|
BLAKE2b-256 | ae0229f4ae7bb239c441f96bbd6ea8ec7ac75a50daff0037ed0c5186613e6a50 |
File details
Details for the file django_thumbnails-0.3.1-py3-none-any.whl
.
File metadata
- Download URL: django_thumbnails-0.3.1-py3-none-any.whl
- Upload date:
- Size: 23.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.19.1 setuptools/39.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f1c3d8b43aadba2e2c16bb619b1223376e8bcfaa41fa3f9a12ca00c06f7b420b |
|
MD5 | 75368a70e538be4126871e4b4e76d94c |
|
BLAKE2b-256 | 9263d9d114c22f3e16fb6c6d80043dbc3aa5c5bf865c6a4f53802428c0efeea5 |