Bash & ImageMagick: Cortar Imagens

3 de Junho, 2016

Apple, Debian, Informática, Linux, Open-Source, Software

Automatizar tarefas é o dia-a-dia de qualquer administrador de sistemas, hoje explico como podemos cortar grandes quantidades de imagens de forma rápida recorrendo ao terminal. Partimos dos seguintes pressupostos:

  • Temos diversas imagens numa pasta;
  • Todas as imagens têm as mesmas dimensões;

Para estas operações uma boa solução é o ImageMagick, uma suite de ferramentas command-line para criar, editar e converter imagens em diversos formatos. Disponível para sistemas Linux, Mac OSX, iOS e Android.

No meu caso, instalei num Mac via Homebrew com o seguinte comando:

brew install imagemagick

No Debian:

apt-get install imagemagick

Remover x pixeis de todas as extremidades

Com a opção -shave é possível definir um número de pixeis a remover de forma equitativa de todas as extremidades da imagem. Exemplo:

convert *.jpg -shave 50 output.jpg

Recortar uma região das imagens

A opção -crop é utilizada para recortar uma região de interesse das imagens. O seguinte comando irá remover 50px do topo da imagem e outros 50px a partir da sua esquerda:

convert *.jpg -crop +50+50 output.jpg

Podemos também remover da direita e do fundo trocando os sinais + por -:

convert *.jpg -crop -50-50 output.jpg

Recortar uma região personalizada a partir de duas extremidades

Normalmente procuramos recortar uma região personalizada a partir de duas extremidades, ou seja, excluir a parte verde da seguinte imagem, ficando apenas com o quadrado cinzento de 200px:

square-cut

Para isto utilizamos combinamos as dimensões do quadrado cinzento com a técnica anterior:

convert *.jpg -crop 200x200+50+50 output.jpg

E ficaremos só com o quadrado cinzento. Muito útil!

Bónus: Juntar imagens cortadas

Imaginemos que temos 10 imagens para cortar com a técnica anterior e queremos junta-las numa só posteriormente de forma vertical. Para isto temos a opção -append:

convert *.jpg -crop 200x200+50+50 -append output.jpg

Podemos também juntar da esquerda para a direita substituindo -append por +append.

Nota: A opção *.jpg nos comandos procura todas as imagens com extensão jpg. Isto poderá ser mudado para outra ou para o nome de um ficheiro caso apenas pretendermos cortar uma imagem.