Загрузите изображение с помощью AJAX, обрежьте часть по нашему выбору и сохраните в админке django.

Мне нужно дать администратору возможность загружать изображение для ImageField с помощью AJAX, а затем обрезать часть по своему выбору (с заранее определенным соотношением размеров или разрешением), а затем сохранять обрезанное изображение в базе данных.

Я пробовал django-image-cropping и django-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 обрезает изображение в два этапа: сначала нам нужно загрузить изображение, сохранить его в БД , затем нам снова нужно открыть объект и выбрать часть обрезки, а затем снова сохранить его в базе данных, что я считаю излишне громоздким. Какие-либо предложения?


person Iqbal    schedule 20.02.2015    source источник
comment
Вам нужно создать собственный виджет. Эта задача не только для python. Вам также нужен java-скрипт на стороне клиента.   -  person EvilX    schedule 04.04.2015
comment
Я думаю, вы должны либо принять ответ, либо указать свои потребности   -  person tgdn    schedule 23.04.2015


Ответы (3)


Похоже, вам понадобится JS-библиотека в браузере, которая выполняет фактическую обрезку. Затем вы можете использовать AJAX для отправки на сервер.

DarkroomJS может быть именно тем, что вам нужно. Он использует холст HTML5 для редактирования изображений в браузере. На самом деле у него на несколько функций больше, чем вам нужно, но он должен выполнять свою работу.

person BenWurth    schedule 09.04.2015
comment
Не могли бы вы поподробнее рассказать о том, как это сделать в админке django? У меня мало знаний о передовых технологиях. - person Iqbal; 24.04.2015
comment
На самом деле я не очень хорошо знаком с администратором Django, поэтому я не слишком уверен в специфике. Я немного погуглил и нашел эту статью, которая может оказаться полезной: mechanicalgirl.com/post/ В статье рассказывается о создании загрузчика изображений с помощью перетаскивания, но вы, вероятно, могли бы заменить эту функцию библиотекой обрезки. - person BenWurth; 28.04.2015

Библиотека django-client-side-image-cropping обрезает изображение на стороне клиента (с помощью библиотеки Croppie Javascript) до определенного размера. Он совместим с сайтами django-admin. Он не использует AJAX. Он использует InMemoryUploadedFile для временного хранения исходного файла.

person arman    schedule 26.08.2020

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)
person Aneesh Usman    schedule 20.06.2021