Найти - Пользователи
Полная версия: Несколько изображений в моделе с кропом картинок
Начало » Django » Несколько изображений в моделе с кропом картинок
1
TheVampire
Доброго времени суток.
Столкнулся с задачей создания карточки товара и есть необходимость в прикреплении нескольких (может быть разное кол-во) изображений к модели карточки товара с кропом этих изображений при загрузке.
Какие варианты реализации могут быть ?
fashust
ну в плане моделей можно что-то типа такого:
class MyModel(models.Model):
"""

"""
bla-bla-bla

class MyModelImages(models.Model):
"""
images for work
"""
mymodel = models.ForeignKey(MyModel, unique=False)
image = models.ImageField()
а для кропа https://github.com/sorl/sorl-thumbnail

если уж вообще красиво делать то можно и http://www.uploadify.com/ прикрутить
Imposeren
sorl-thumbnail для кропа не годится, по крайней мере я что-то не нашел способа как вырезать кусок в нужных координатах.
Если надо просто под конкретный “формат” уменьшить, то конечно подрежет как надо.
fashust
Imposeren
ля кропа не годится, по крайней мере я что-то не нашел способа как вырезать кусок в нужных координатах.
Ну в таком случае вам PIL и ручками писать кропанье.
py
Сталкивался с такой задачей. Писал декоратор для метода сохранения модели:
def crop_and_resize(crop_fields=('image',), 
resize_to=(800, 600),
crop_to=(188, 190)):
def _crop_and_resize(func):
def wrapper(obj, *a, **kw):
output = func(obj, *a, **kw)
for field in obj._meta.fields:
if isinstance(field, ImageField):
try:
path = getattr(getattr(obj, field.name), 'path')
img = Image.open(path)
if hasattr(obj, field.name+'_xywh') \
and field.name in crop_fields:
x, y, w, h = (
int(x) for x in getattr(obj, field.name+'_xywh').split(';'))
img = img.crop((x, y, x+w, y+h))
if img.size > crop_to:
img = img.resize(crop_to, Image.ANTIALIAS)
img.save(path+'_thumb.jpg', format='JPEG', quality=100)
else:
if img.size > resize_to:
img.thumbnail(resize_to, Image.ANTIALIAS)
img.save(path, format='JPEG', quality=100)
except: pass
return output
return wrapper
return _crop_and_resize
Только нужно в форме создать поля для передачи координат обрезки и передавать их в метод сохранения модели. Ну, понятно что координаты должны задаваться джаваскриптом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB