Форум сайта python.su
Доброго времени суток.
Столкнулся с задачей создания карточки товара и есть необходимость в прикреплении нескольких (может быть разное кол-во) изображений к модели карточки товара с кропом этих изображений при загрузке.
Какие варианты реализации могут быть ?
Офлайн
ну в плане моделей можно что-то типа такого:
class MyModel(models.Model):
"""
"""
bla-bla-bla
class MyModelImages(models.Model):
"""
images for work
"""
mymodel = models.ForeignKey(MyModel, unique=False)
image = models.ImageField()
import this
Офлайн
sorl-thumbnail для кропа не годится, по крайней мере я что-то не нашел способа как вырезать кусок в нужных координатах.
Если надо просто под конкретный “формат” уменьшить, то конечно подрежет как надо.
Офлайн
ImposerenНу в таком случае вам PIL и ручками писать кропанье.
ля кропа не годится, по крайней мере я что-то не нашел способа как вырезать кусок в нужных координатах.
import this
Офлайн
Сталкивался с такой задачей. Писал декоратор для метода сохранения модели:
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
Отредактировано (Март 11, 2012 14:59:43)
Офлайн