Otimizando imagens "upadas" no Django
Todos conhecem o ditado "Uma imagem vale mais que mil palavras", se pensarmos na WEB isso não só é verdade como é quase uma obrigação possibilitar ao usuário enviar imagens para o sistema, seja esse um blog, um site institucional, ou um gerenciador de conteúdo.
Também sabemos que a qualidade das câmeras só aumenta com o passar do tempo, principalmente se pensarmos nos smartphones. Nós desenvolvedores temos como preocupação adicional no desenvolvimento de um sistema WEB tornar o carregamento, das imagens enviadas pelos usuário, o mais rápido possível reduzindo o tempo de carregamento bem como a quantidade de dados consumida para mostrar a imagens nos smartphones.
No Django como já é de conhecimento de muitos desenvolvedores existe o site que organiza várias bibliotecas que auxiliam o desenvolvimento dos sistemas, e nesse post quero falar da Django Image Optimizer https://github.com/agusmakmun/django-image-optimizer. O objetivo dela é muito simples, reduzir o tamanho do arquivo (imagem) enviada ao servidor sem perda de qualidade. Então vamos ao rápido tutorial.
Instalação
pip install django-image-optimizer
Adicionando a app no nosso projeto, settings.py
# settings.py
INSTALLED_APPS = [
....
'image_optimizer',
]
No meu caso eu escolhi otimizar a imagem utilizando o Pillow, configurando também no settings a linha a seguir. Também é possível utilizar a API do TinyPNG (https://tinypng.com/developers)
OPTIMIZED_IMAGE_METHOD = 'pillow'
Por fim no models criei um atributo to tipo OptimizedImageField()
from django.db import models
from image_optimizer.fields import OptimizedImageField
class MyModel(models.Model):
...
image = OptimizedImageField()