Skip to main content

render image in various sizes

Project description

Build Status Coverage PyPI Version

Django image renderer is Django app that will help you render images in many sizes (renditions).


Features

  • uses Pillow to resize images
  • uses Django’s default_storage to let you play with whatever storage backend you’ll need
  • uploaded image files named using uuid
  • rendition cached on disk
  • resize keeping orignal aspect ratio
  • crop if needed
  • simple widget for admin site

Quick start

Add “renderer” to your INSTALLED_APPS setting like this:

INSTALLED_APPS = (
    # your apps
    'renderer',
)

Include the renderer URLconf in your project urls.py like this:

url(r'^renderer/', include('renderer.urls', namespace='renderer'))),

Run python manage.py migrate to create the renderer models.

Start the development server and visit http://localhost:8000/admin/ to create a MasterImage (you’ll need the Admin app enabled).

Requirements

  • Python 2.7
  • Django (1.7, 1.8, 1.9b1)

Installation

pip install django-image-renderer

Usage

There is only one model in the app: MasterImage. With a MasterImage you can ask for renditions.

m = MasterImage.objects.first()

# get the master file's URL
m.get_master_url()
# or
m.get_rendition_url(0, 0)

# cache and return URL of a renditions that as 200 pixels width
# and height computed according to master's aspect ratio
url = m.get_rendition_url(200, 0)

# cache and return URL of a renditions that as 50 pixels height
# and width computed according to master's aspect ratio
url = m.get_rendition_url(0, 50)

If you ask for a size that do not fit master’s aspect ration you’ll receive a center cropped image.

You can also ask for a rendition in templates.

def index(request):
    m = MasterImage.objects.first()
    return render(request, 'demo/index.html', {
        'master': m,
    })
{% load renderer %}
...
{% rendition master 42 42 %}
...

This will render as:

<img src="/media/img/0fb34de8-9d83-456a-828b-72ab21f8ebab_42x42.png" width="42" height="42" alt="">

When using MasterImage in your model you may need a widget who provides a preview for you image. For convenience a mixin is provided.

models.py

from django.db import models

class DemoModel(models.Model):
    master = models.ForeignKey('renderer.MasterImage')

admin.py

from demo.models import DemoModel
from django.contrib import admin
from renderer.widgets import MasterImageAdminMixin

@admin.register(DemoModel)
class DemoModelAdmin(MasterImageAdminMixin, admin.ModelAdmin):
    fields = ('master', )

Sample project

A sample project is available in the sample folder. Test it as an usual django project:

virtualenv --no-site-packages venv
source venv/bin/activate
pip install -r requirements.txt
python sample/manage.py migrate
python sample/manage.py createsuperuser
python sample/manage.py runserver

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for django-image-renderer, version 0.1.0
Filename, size File type Python version Upload date Hashes
Filename, size django_image_renderer-0.1.0-py2-none-any.whl (12.8 kB) File type Wheel Python version py2 Upload date Hashes View
Filename, size django-image-renderer-0.1.0.tar.gz (11.0 kB) File type Source Python version None Upload date Hashes View

Supported by

Pingdom Pingdom Monitoring Google Google Object Storage and Download Analytics Sentry Sentry Error logging AWS AWS Cloud computing DataDog DataDog Monitoring Fastly Fastly CDN DigiCert DigiCert EV certificate StatusPage StatusPage Status page