Приложение Django для обрезки изображений с помощью инструмента обрезки
Мне нужно приложение для обрезки изображения на стороне клиента, я имею в виду, используя инструмент обрезки, такой как jcrop jQuery plugin.
Я нашел этот инструмент:
но последние два зависят от администратора, и два первых кажутся очень связанными с собственными ImageFields и модели, любое хорошее решение?
мы работаем над большим приложением со многими функциями и очень сложно изменить логику, записанную
1 ответов
Я думаю, что это то, что вы, вероятно, лучше всего писать сами, поскольку это зависит от того, как ваши данные и модели выложены, хотите ли (и где) вы сохранить урожай, если вы хотите сохранить оригиналы и т. д. Даже если у вас есть большое приложение, вы, вероятно, тратить больше времени, пытаясь согнуть другой код, чтобы делать то, что вам нужно в вашей ситуации.
(этот код очень грубый - я просто выкладываю шаги на самом деле)
если у вас есть модель с imagefield, вы можете добавить второе поле изображения для удержания обрезанного изображения:
class MyModel(models.Model):
image = models.ImageField(...)
image_crop = models.ImageField(...)
и форма с дополнительным полем для хранения координат jcrop, которые будут заполнены в форме на стороне клиента (поле будет скрыто). В какой форме вы сохраняете координаты в поле, зависит от вас, но может быть идея использовать словарь json (json.js на стороне клиента и simplejson на стороне сервера), что-то вроде:
{ 'x1' : '145', 'y1' : '200' ... }
форма:
class MyModelForm(form.ModelForm):
""" Hide a field to hold the coordinates chosen by the user """
crop_coords = forms.CharField(attrs={'style':'display:none'})
class Meta:
model = MyModel
посмотреть что обрабатывает все это:
def some_view(request):
form = request.POST
if form.is_valid():
crop_coords = form.cleaned_data['crop_coords']
# decode the coords using simpleson (or however you passed them)
...
# create a cropped image
original_image = form.cleaned_data['image']
cropped_image = cropper(original_image.path, crop_coords)
...
# save it back to the db - http://stackoverflow.com/questions/1308386/programmatically-saving-image-to-django-imagefield
...
и функция для создания обрезанного изображения с помощью PIL:
# Look here: http://djangosnippets.org/snippets/224/
def cropper(original_image_path, crop_coords):
""" Open original, create and return a new cropped image
...