Skip to content

HTTPS clone URL

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, 803 commits behind matthewwithanm:develop

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
imagekit
reading
.gitignore
AUTHORS
EXAMPLES.txt
LICENSE
LICENSE.txt
MANIFEST.in
README.rst
README.txt
setup.py

README.rst

django-imagekit

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 https://github.com/jdriscoll/django-imagekit. 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/models.py

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/specs.py

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 manage.py ikflush myapp

Step 5

Use your new model in templates.

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

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

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

Step 6

Play with the API.

>>> from myapp.models import Photo
>>> p = Photo.objects.all()[0]
<Photo: MyPhoto>
>>> p.display.url
u'/static/photos/myphoto_display.jpg'
>>> p.display.width
600
>>> p.display.height
420
>>> 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

beer.enjoy()
Something went wrong with that request. Please try again.