No description, website, or topics provided.
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
thumbnails
.gitignore
.travis.yml
AUTHORS.txt
LICENSE.txt
MANIFEST.in
Makefile
README.rst
setup.py

README.rst

Build Status

Design:

  • Uses Django Storage API
  • Uses flexible meta data store. Database and Redis metadata backend supported at the moment.

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:

import thumbnails

class Food(models.Model):
    image = thumbnails.Field()


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.

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.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.