Удобная работа с картинками в Django

от автора

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
Документация

ссылка на оригинал статьи http://habrahabr.ru/post/159513/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *