Skip to main content

This app allows upload and crop images

Project description

This application is used for image cropping. User can upload some images or photo, pick wished area up and save image.

The license is MIT.

Requirements

Starting with version 0.2 the Django of version 1.3+ is required. If you’re use an older Django version, please

Also you need PIL or Pillow graphic libraries to be installed. The PIL will be installed together with django-image-cropper

Installation

First of all, please install django-image-cropper:

pip install django-image-cropper

Then you must edit your settings module: add item ‘cropper’ to your INSTALLED_APPS:

INSTALLED_APPS += (
    'cropper',
)

Next step add django-image-cropper URL config to your url module:

urlpatterns = patterns('',
    ....
    url('^cropper/', include('cropper.urls')),
    ...
)

And last call syncdb management command in your project:

./manage.py syncdb

if you’re use django.contrib.staticfiles application, you also need to collect static files:

./manage.py collecstatic

Otherwise you need copy django-image-cropper/cropper/static files into your STATIC_ROOT directory manually or create a symlink.

Usage

Open /cropper/ URL in your browser. Here you can choose image via file input and upload it. On the next screen, if javascript is enabled and static serves good, you’ll see the jQuery’s jCrop plugin workspace. Pick some area and push the Crop button to get cropped image

Cropped image copies are saved on server

Customize crop logics

Of course, default logic is poor and unusable. But you can easy change application behavior.

You can write own success handlers for image upload and image crop and tell django to use it.

To use own hanlders insead of defaults, just use own URLConfs. You must use own ‘success’ key in keyword args. This value must be python callable type

from cropper.forms import CroppedForm, UploadForm
from my_project.utils import my_upload_handler, my_crop_handler

urlpatterns = patterns('cropper.views',
    url('^$', view='upload', name='cropper_upload', kwargs={'form_class': UploadForm, 'success':  my_upload_handler}),
    url('^(?P<original_id>\d+)/$', view='crop', name='cropper_crop', kwargs={'form_class': CropForm, 'success':  my_crop_handler}),
)

As you see, you can also use another form class instead of standart if you’ll specify ‘form_class’ key, but probably don’t need this.

What handler is it?

Each handler is python function which has some input arguments and returns HttpResponse object like every view function.

Let’s see to upload handler prototype:

def my_upload_success_handler(request, form, original):
    """
    Success upload handler
    """
    print "Uploda form data", form.cleaned_data
    print "File uploaded to " % original.image.path

    # This handler do nothing, but print parameters

    from django.shortcuts import redirect
    return redirect(original)
  • request is WSGIRequest object (same as view)

  • form is upload form instance. This form instance is valid anyway.

  • original is Original model instance. Image field calls image

Crop handler prototype:

def my_crop_success_handler(request, form, original, cropped):
    """
    Custom crop handler
    """
    print "Crop form data", form.cleaned_data
    print "Original object: %s" % original
    print "Original in cropped model (the same in previous line): %s" % cropped.original
    print "Cropped image: %s" % cropped.image

    # For example, we can use cropped image as user profile avatar
    # Perhaps user is authenticated and skip checks ;)

    from django.core.files.base import ContentFile
    from django.contrib import messages
    from django.shortcuts import redirect
    import os

    profile = request.user.get_profile()
    profile.avatar.save(
        os.path.basename(cropped.image.path),
        ContentFile(cropped.image.path)
    )

    messages.success(request, 'Avatar uploaded and cropped')
    return redirect(request.user)

First three arguments the same as upload handler input arguments. Fouth - is Cropped model instance. It has image field containts cropped image and foreign key to related Original photo.

Contributing

If you’ve found a bug, implemented a feature and think it is useful, then please consider contributing. Patches, pull requests or just suggestions are welcome!

Project details


Download files

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

Source Distributions

django-image-cropper-0.3.0.zip (67.6 kB view details)

Uploaded Source

django-image-cropper-0.3.0.tar.gz (57.7 kB view details)

Uploaded Source

django-image-cropper-0.3.0.tar.bz2 (51.4 kB view details)

Uploaded Source

File details

Details for the file django-image-cropper-0.3.0.zip.

File metadata

File hashes

Hashes for django-image-cropper-0.3.0.zip
Algorithm Hash digest
SHA256 75d832981c201f2d35a37374025ca08048e7042f1719dca3ec54548115b5f1d4
MD5 93caa811839d3ddeda6ec768bd1e77e7
BLAKE2b-256 068339d51af3e4896cb7b52b9c25ca0efd3ab471687e1ff02bbbf23e579b9265

See more details on using hashes here.

File details

Details for the file django-image-cropper-0.3.0.tar.gz.

File metadata

File hashes

Hashes for django-image-cropper-0.3.0.tar.gz
Algorithm Hash digest
SHA256 cea000af7eceadb21188df67ac5811a68c8c3d2a7170beb10a17ecf521385eea
MD5 4297ff285b277bc357165c8a289be81b
BLAKE2b-256 d01de0d47691410cd152134406e287ccbd47e37e0e050ec658c67b81f51ad064

See more details on using hashes here.

File details

Details for the file django-image-cropper-0.3.0.tar.bz2.

File metadata

File hashes

Hashes for django-image-cropper-0.3.0.tar.bz2
Algorithm Hash digest
SHA256 bf2371a26289309395abeb283dd3e486372420f325cc665051d5a64b9d12e224
MD5 4b424860de0ce97d3d80b62c9ad1a5e4
BLAKE2b-256 7b6f5bf12ae45a06b89764f4edd6a97e05ce91b85c0d6356299dd4a0fbfcb4bb

See more details on using hashes here.

Supported by

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