breaking bad

O Thumbor é uma ferramenta open source para redimensionamento de imagens que faz um monte de coisas pra quem trabalha muito com thumbnails. Ele é ideal para quando você precisa encaixar uma imagem em recortes e tamanhos diferentes. Se essa descrição te lembrou sites de notícias, é porque esse serviço foi criado (e é usado) pelo pessoal da globo.com.

A ferramenta faz coisas fantásticas com diversas configurações possíveis. Tudo roda num servidor que você passa a usar para fazer as chamadas das imagens, ele processa a imagem original de acordo com o que você pedir. E o melhor é que tudo é passado através da própria URL, no padrão:

http://*thumbor-server*/hmac/trim/AxB:CxD/fit-in/-Ex-F/HALIGN/VALIGN/smart/filters:FILTERNAME(ARGUMENT):FILTERNAME(ARGUMENT)/*image-uri*

Tomando como exemplo esta imagem que tem tamanho de 1600×800, poderíamos pedir uma imagem redimensionada de 800×400 com o seguinte link:

http://servidor-thumbor/unsafe/800x400/i.imgur.com/f2NoiqB.jpg

E já teríamos a imagem no tamanho correto para o nosso site. Ele faz muito mais do que simplesmente isso e tenta ser o mais performático possível utilizando caches configuráveis.

O problema do Thumbor é que instalá-lo pela primeira vez pode ser um trabalho cansativo e trabalhoso, e é aí que entra o Docker.

Docker

O Docker pode te ajudar em tarefas como essa, você poderia configurar tudo da primeira vez e em seguida criar um container para nunca mais ter que fazer isso de novo, além de poder descer e subir novos containers quando quiser.

Com o lançamento do Docker Beta usar containers ficou muito mais fácil para usuários Mac e Windows. Pedi meu código de invite para o Beta e instalei o Docker a fim de tentar rodar o Thumbor aqui.

Para minha sorte alguém já quis fazer isso e já deixou uma imagem prontinha no Docker Hub, é só baixar e rodar.

Eu executei o seguinte comando em meu terminal:

$ docker run -p 8000:8000 apsl/thumbor

E pronto! Eu tinha um servidor Thumbor rodando na minha máquina. É sério, tudo simplesmente funcionou em menos de 10 minutos (contando o tempo de download da imagem!). É sensacional que eu possa subir e descer um servidor que levaria possivelmente horas para configurar com apenas 1 comando.

O parâmetro acima está redirecionando a porta 8000 da minha máquina para a porta 8000 do servidor Thumbor, agora eu posso pedir uma imagem localmente:

http://localhost:8000/unsafe/200x400/i.imgur.com/f2NoiqB.jpg

O que me daria a seguinte imagem:

breaking bad

O Thumbor está funcionando, mas nesse caso a imagem gerada não foi das melhores. Felizmente o Thumbor possui alguns algoritmos inteligentes de detecção de rosto ou de features, que são pontos mais interessantes da imagem, eles podem ser usados para gerar miniaturas mais relevantes do que simplesmente um recorte centralizado da imagem. Segundo a documentação, basta eu passar smart na URL de requisição para o Thumbor recortar utilizando esses algoritmos.

http://localhost:8000/unsafe/200x400/smart/i.imgur.com/f2NoiqB.jpg

Porém, rodando dessa maneira recebi a mesma imagem anterior:

breaking bad

Lendo a documentação descobri que o motivo é que o Thumbor não vem com nenhum desses algoritmos inteligentes por padrão, é necessário habilitá-los. O legal é que a imagem Docker dele nos permite configurar tudo através de variáveis de ambiente, que eu posso especificar no momento em que executo docker run.

Nesse caso basta eu habilitar os detectores com o comando:

docker run -e DETECTORS="['thumbor.detectors.face_detector','thumbor.detectors.feature_detector']" -p 8000:8000 apsl/thumbor

O que mudou foi o parâmetro -e utilizado para especificar variáveis de ambiente para o container.

Agora fazendo a mesma requisição acima temos uma imagem muito melhor:

breaking bad

Unindo o Thumbor ao Docker temos um servidor inteligente de thumbnails rodando em nossa máquina em minutos, e, o mais importante, igualmente fácil de ser levado para qualquer outra máquina. Agora junte isso ao poder de estruturas como o Azure Container Services e você tem seu próprio cluster pronto para ser utilizado por seus aplicativos, tudo com o mínimo de fricção possível!

Mahmoud Ali

Desenvolvedor de Software na Lambda3, Microsoft MVP, amante de um bom café ☕️ e uma boa cerveja 🍺.