Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fork of JDriscoll's django image-processing toolkit, with metadata support, ICC color management, and image statistics
Python C JavaScript

This branch is 187 commits ahead, 801 commits behind matthewwithanm:develop

Failed to load latest commit information.
imagekit Formatting.
reading Many small changes, incl. a 30% speed increace in the ICCProfile modu…
.gitignore Added migrations to .gitignore.
AUTHORS Credit for time served.
EXAMPLES.txt Initial commit of F2K ImageKit fork.
LICENSE Wrangling in a stray line.
LICENSE.txt Initial commit of F2K ImageKit fork. Initial commit for cythonized processors.
README.rst Added a note to README
README.txt Refactored some of the Cython stuff and nixed some bad settings and o…



ImageKit In 7 Steps

Step 1*

$ pip install django-imagekit

(or clone the source and put the imagekit module on your path)

note: this will install the upstream version of imagekit, which also lives on GitHub at You're reading a page in the repo of my fork, which isn't on PyPI -- just use the GitHub download button if you need my changes.

Step 2

Add ImageKit to your models.

# myapp/

from django.db import models
from imagekit.models import ImageModel

class Photo(ImageModel):
    name = models.CharField(max_length=100)
    original_image = models.ImageField(upload_to='photos')
    num_views = models.PositiveIntegerField(editable=False, default=0)

    class IKOptions:
        # This inner class is where we define the ImageKit options for the model
        spec_module = 'myapp.specs'
        cache_dir = 'photos'
        image_field = 'original_image'
        save_count_as = 'num_views'

Step 3

Create your specifications.

# myapp/

from imagekit.specs import ImageSpec
from imagekit import processors

# first we define our thumbnail resize processor
class ResizeThumb(processors.Resize):
    width = 100
    height = 75
    crop = True

# now we define a display size resize processor
class ResizeDisplay(processors.Resize):
    width = 600

# now let's create an adjustment processor to enhance the image at small sizes
class EnchanceThumb(processors.Adjustment):
    contrast = 1.2
    sharpness = 1.1

# now we can define our thumbnail spec
class Thumbnail(ImageSpec):
    access_as = 'thumbnail_image'
    pre_cache = True
    processors = [ResizeThumb, EnchanceThumb]

# and our display spec
class Display(ImageSpec):
    increment_count = True
    processors = [ResizeDisplay]

Step 4

Flush the cache and pre-generate thumbnails (ImageKit has to be added to INSTALLED_APPS for management command to work).

$ python ikflush myapp

Step 5

Use your new model in templates.

<div class="original">
<img src="{{ photo.original_image.url }}" alt="{{ }}">

<div class="display">
<img src="{{ photo.display.url }}" alt="{{ }}">

<div class="thumbs">
{% for p in photos %}
<img src="{{ p.thumbnail_image.url }}" alt="{{ }}">
{% endfor %}

Step 6

Play with the API.

>>> from myapp.models import Photo
>>> p = Photo.objects.all()[0]
<Photo: MyPhoto>
>>> p.display.url
>>> p.display.width
>>> p.display.height
>>> p.display.image
<JpegImagePlugin.JpegImageFile instance at 0xf18990>
>>> p.display.file
<File: /path/to/media/photos/myphoto_display.jpg>
>>> p.display.spec
<class 'myapp.specs.Display'>

Step 7

Enjoy a nice beverage.

from refrigerator import beer

Something went wrong with that request. Please try again.