Imagekit — приложение, которое позволяет производить манипуляции над изображениями, без изменения исходной картинки. Я думаю удобство и так понятно, Вы можете иметь несколько вариантов картинки и всегда иметь возможность вернуться к исходнику.
Позволяет изменять размеры, создавать превью, накладывать водяные знаки.
Установка
Для работы с imagekit вам понадобится PIL или PILLOW
Ставим из PyPI:
pip install django-imagekit
Добавляем 'imagekit' в INSTALLED_APPS
Использование в модели
import PIL
...
from PIL import Image
from imagekit.models.fields import ImageSpecField
from imagekit.processors import ResizeToFit, Adjust,ResizeToFill
class Jobseeker(models.Model):
def get_file_path(self, filename):
extension = filename.split('.')[-1]
filename = "%s.%s" % (uuid.uuid4(), extension)
return os.path.join("images", filename)
...
photo = models.ImageField(verbose_name=u'Poster',upload_to=get_file_path,max_length=256, blank=True, null=True)
photo_small =ImageSpecField([Adjust(contrast=1.2, sharpness=1.1),
ResizeToFill(50, 50)], image_field='photo',
format='JPEG', options={'quality': 90})
photo_medium =ImageSpecField([Adjust(contrast=1.2, sharpness=1.1),
ResizeToFit(300, 200)], image_field='photo',
format='JPEG', options={'quality': 90})
photo_big =ImageSpecField([Adjust(contrast=1.2, sharpness=1.1),
ResizeToFit(640, 480)], image_field='photo',
format='JPEG', options={'quality': 90})
Использование в шаблоне
В view.py передаем обьект
def some_def(request):
...
photo = Jobseeker.objects.get()
...
return (render_to_response('jobseeker/resume_template.html',
{
...
'photo': photo,
...
}, context_instance=RequestContext(request))
)
и в шаблоне мы можем обратиться к таким полям:
photo.photo_small.url # превью размером 50х50
photo.photo_medium.url # изображение приведенное к размерам 300х200
photo.photo_big.url # изображение приведенное к размерам 640х480
# можем обратиться к свойствам картинки
photo.photo_small.width #вернет 50
photo.photo.width #вернет ширину оригинальной картинки
В данном примере мы использовали 2 image процессора, а именно: ResizeToFit и ResizeToFill.
На самом деле их несколько больше — processors Module
ResizeToFit(width=None, height=None, upscale=None, mat_color=None, anchor='c')
Назначение: будет создано изображение с указанными размерами, на которое наложено исходное изображение, пропорционально сжатое, что бы не выходить за указанные рамки.
width=None, height=None — ширина и высота, соответственно.
upscale — булево значение, определяющее, будет ли увеличено изображение, если оно меньше указанных параметров
mat_color — цвет заливки незаполенной исходным изображением области.
ResizeToFill(width, height)
Назначение: изменить размер до указанных размеров, все что выходит за указанные размеры будет обрезано
В атрибутах соответственно указывается шинира и высота.
Примеры работы
Оригинальное фото
ResizeToFill
ResizeToFit с применением параметра mat_color, чтобы показать реальные размеры нового изображения
Все дополнительные картинки созданные с помощью imagekit сохраняются в папке caсhe, все оригиналы сохранены в отдельной папке. Создаются при первом заходе на страницу в которой используются. В любое время все картинки можно удалить без вреда для оригинала и создать заново с новыми параметрами.
Все это очень облегчает работу с изображениями, и сохраняет нервы разработчика, если начальные настройки вдруг оказались не верными, а оригиналы не додумались сохранить.
Ссылки:
Github
Документация
Автор: int22h