使用AJAX上传图像,裁剪我们选择的部分,然后保存在django admin中

时间:2015-02-20 12:59:37

标签: django pillow easy-thumbnails

我需要为管理员提供使用AJAX上传ImageField图像的功能,然后裁剪他选择的部分(使用预定义的尺寸比率或分辨率),然后将裁剪后的图像保存到数据库中。

我为此尝试了django-image-croppingdjango-ajaximage

#Using django-image-cropping
from image_cropping import ImageRatioField
class Alumnus(models.Model):
    photo = models.ImageField(null=True, blank=True)
    cropped_photo = ImageRatioField('photo', '430x360')


#Using django-ajaximage
from ajaximage.fields import AjaxImageField
class Alumnus(models.Model):
    photo = AjaxImageField(
                           upload_to='alumni_photos',
                           max_height=400,
                           max_width=400,
                           crop=True
                         )

虽然django-ajaximage使用AJAX上传图片,但它不允许管理员选择要裁剪的图像部分,django-image-cropping分两步裁剪图像:首先我们需要上传一个图像,将其保存到数据库中,然后再次我们需要打开该对象并选择裁剪部分,然后将其再次保存到数据库中,我觉得这是不必要的麻烦。有什么建议吗?

3 个答案:

答案 0 :(得分:1)

看起来你需要在浏览器中使用JS库进行实际裁剪。然后,您可以使用AJAX将其发送到服务器。

DarkroomJS可能正是您所需要的。它使用HTML5画布在浏览器中进行图像编辑。它实际上提供了比你需要的更多的功能,但它应该完成工作。

答案 1 :(得分:0)

django-client-side-image-cropping库在客户端(使用Croppie Javascript库)将图像裁剪为特定大小。它与django-admin网站兼容。它不使用AJAX。它使用InMemoryUploadedFile临时存储原始文件。

答案 2 :(得分:-1)

django-cropper-image 是我为客户端裁剪和压缩上传的图像而制作的应用程序,通过 Django 的应用程序使用帮助cropper.js。 github 链接 django-cropper-image

from django.db import models
from django_cropper_image.fields import ImageCropperField
class Images(models.Model):
    image = ImageCropperField(upload_to='image',max_length=255)