An image rendering service for Django.
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.


Image Rendering Service for Django


Provides on-the-fly image manipulation based on the URL used to access the image. Also provides a utility to generate those URLs for you. The basic use case is that you want to allow images to be uploaded to your website and you want to be able to display those images at various sizes on your site. Manipulation is done using PIL.

The manipulated images are cached (using the cache method you have configured in django) and 304 responses are served appropriately, so the service performs fairly well. However, this is not intended for large-scale use. It is a perfect solution for small to medium websites.


    python install

    You could also just add django-irs directory to your PYTHONPATH, which may
    be better for you if you choose to clone the repository so you always have
    the current code.


1) Include the IRS url conf in your url conf.

    urlpatterns = patterns('',
        (^r'irs/', include('irs.urls')),

2) Store your images somewhere in MEDIA_ROOT. When you give django-irs an image path, it should be relative to this directory. This is the default behavior of django, so this should be a simple task.

3) Use the ImageURL object to generate your image URL. All the methods of ImageURL can be chained.

    from irs.util import ImageURL
    image_path = 'portraits/dustin.jpg'
    url = ImageURL(image_path).resize(width=100, height=100).url()


These are the methods you can call on the ImageURL object to manipulate the image.

resize(small, width, height):

    Resizes the image to the maximum dimensions provided.

        small - the max dimension for the smallest original dimension
        width - the maximum width
        height - the maximum height

    Only one must be specified. small will trump width & height. In all cases the aspect ratio of the image will be preserved.


    Creates a square image of the given size. It will be taken from the center of the original image. It is often useful to resize the image before doing this to ensure the result is not an incredibly small piece of the image. For example, taking a 200px square center crop out of a 1200px image would probably look bad.


This code uses inline documentation which can be viewed by using pydoc. However, for example, if you run

    pydoc irs.views

You will likely get the following error: 

    problem in irs.views - <type 'exceptions.ImportError'>: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

To get around this, use the default django global settings and then run pydoc.

    export DJANGO_SETTINGS_MODULE=django.conf.global_settings
    pydoc irs.views


The main pieces are in place, but the are very few image manipulation functions currently available. Adding more of these would be an easy way to help. However, I'm sure you can find lots of other ways to improve my code.

TODO (In rough order of priority)

  * There are no unit or integration tests
  * Docs are lacking a bit
  * Add API for storing files, so that this could be used as a standalone service
    * It would be nice if the API could be accessed directly via python (for local usage) as well
      as an HTTP REST API.
    * Might as well also provide a REST Client class to make accessing the API w/
      Python easy.
  * Add more image manipulation options