создание обрезаемого поля изображения - как хранить данные виджета?

Мне интересно, как лучше всего реализовать обрезаемый ImageField в Django.

В основном я хотел бы загрузить изображения и обрезать их. Например, используя imagAreaSelect.

Первый подход, который пришел мне в голову, состоял в том, чтобы создать ImageField и несколько метаполей в моей модели для хранения коэффициента обрезки, ширины и высоты моего выбора. Но мне интересно, есть ли более чистые способы решить эту проблему и дополнительно инкапсулировать поведение обрезки.

Итак, в конечном итоге я хотел бы обернуть желаемое поведение в виджет. Хотя проблема, которую я вижу, заключается в том, что виджеты обычно сопоставляются с одним полем базы данных.

Поэтому мне интересно, возможно ли это вообще и как лучше всего сохранить данные моего изображения?


person arie    schedule 04.07.2011    source источник


Ответы (2)


В итоге мы создали многоразовое приложение для обрезки изображений: django-image-cropping.

person arie    schedule 03.09.2012
comment
приложение выглядит потрясающе! Можно ли предложить пользователю изменить размер и обрезать изображение? - person Lara; 12.04.2016

Есть несколько способов сделать это. Один из способов состоит в том, чтобы вывести имя обрезанного изображения из имени необрезанного изображения. Таким образом, если у вас есть ImageField и есть изображение с именем uploads/images/family.jpg, ваш CropableImageWidget может предположить, что обрезанное изображение хранится в uploads/images/cropped/family.jpg.

Другой способ — создать свой собственный тип поля базы данных, в котором хранится сериализованное представление всех файлов, которые вы создаете при кадрировании. Может быть через JSON.

person Donald Stufft    schedule 04.07.2011
comment
Привет, Дональд, спасибо за твои предложения. Что мне не нравится в варианте 1, так это то, что мне все еще нужно создать отдельное поле для загрузки. И поскольку мне бы очень хотелось, чтобы эта функциональность была максимально инкапсулирована, чтобы в идеале мне нужно было использовать только CropImageField в определении моей модели, и мне не нужно было настраивать другие вещи. Мне тоже пришло в голову сериализовать данные в одном поле, но опять же, я хотел бы сохранить большую часть функциональности обычного ImageField. Что я пробовал и что действительно выглядит многообещающе, так это использовать CompositeField (bitbucket.org/mp/ django-составное-поле) - person arie; 06.07.2011