Skip to main content

Django model field to store custom image crops

Project description

django-croppy enables creating custom crops of images by specifying a name, coordinates, width and height of the crop.

django-croppy provides a custom model field responsible for creating and deleting crops. Crops are stored as serialized JSON data on the same model as the image field via django-jsonfield.

django-croppy is useful if you want to manually curate the crop size and location instead of relying on generic cropping like django-imagekit provides.

django-croppy makes use of image processors provided by django-imagekit.

Usage

First, create your model with a crop field. You can specify a custom location where to save crops to with the upload_to parameter:

from django.db import models
from croppy.fields import CropField

def upload_to(instance, filename, crop_name):
    """
    Default function to specify a location to save crops to.

    :param instance: The model instance this crop field belongs to.
    :param filename: The image's filename this crop field operates on.
    :param crop_name: The crop name used when :attr:`CropFieldDescriptor.crop` was
        called.
    """
    filename, ext = os.path.splitext(os.path.split(filename)[-1])
    return os.path.join('crops', u'%s-%s%s' % (filename, crop_name, ext))

class Image(models.Model):
    image = models.ImageField()
    crops = CropField('image', upload_to = upload_to)

The created crops field allows you to create, delete and inspect crops.

$ git clone git@github.com:caffeinehit/django-croppy.git
$ cd django-croppy
$ python manage.py syncdb
...
$ python manage.py shell
...
>>> from tests.app import tests
>>> image = tests.get_image('test.tiff')
>>> image
<Image: Image object>
>>> image.image
<ImageFieldFile: images/test.tiff>
>>> image.image.path
u'/home/alen/projects/django-croppy/tests/test-media/images/test.tiff'

>>> # Inspect the crop data
>>> image.crops.data
{}

>>> # Create a new crop called 'rect' at position 0/0
>>> # with a width of 100px and a height of 50px
>>> image.crops.create('rect', (0, 0, 100, 50))

>>> # Inspect the crop data
>>> image.crops.data
{'rect': {'y': 0, 'width': 100, 'height': 50, 'filename': 'crops/test-rect.tiff', 'x': 0}}

>>> # Inspect the crop
>>> image.crops.rect.name
'crops/test-rect.tiff'
>>> image.crops.rect.path
u'/home/alen/projects/django-croppy/tests/test-media/crops/test-rect.tiff'
>>> image.crops.rect.url
'/test-media/crops/test-rect.tiff'

>>> # Save the data to database
>>> image.save()

>>> # Delete the crop
>>> image.crops.delete('rect')
>>> image.crops.data
{}

Project details


Download files

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

Source Distribution

django-croppy-0.1.0.tar.gz (6.4 kB view details)

Uploaded Source

File details

Details for the file django-croppy-0.1.0.tar.gz.

File metadata

  • Download URL: django-croppy-0.1.0.tar.gz
  • Upload date:
  • Size: 6.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for django-croppy-0.1.0.tar.gz
Algorithm Hash digest
SHA256 912d1b1b51a0de4c5e1563233ca5af2e967369dbf50b06f9b2d56bc147f4fd73
MD5 e3e551fe56e2049d87c079b6666b7c41
BLAKE2b-256 f8e0d7d5b7d490bf786234bd032d64aa500ede1a37f0576c210775a642a4ed86

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page