Executando verificação de segurança...
1

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()

Para teste fiz o upload de uma imagem de 5MB para o servidor.

Imgur

Após o processamento da imagem ficou com 1.9MB.

Imgur

Desafio. Qual a imagem original e qual a tratada pelo ImageOptimizer?

Imgur

Carregando publicação patrocinada...