Português do Brasil English
Devin no Facebook  Devin no Twitter  RSS do Site 
Programas    

Tratamento de imagens com ImageMagick


Comentários  12
Visualizações  
72.632

O ImageMagick é uma poderosa ferramenta em modo texto para tratar imagens em suas diversas formas: converter, redimensionar, criar, editar, cortar, juntar, editar cores e mais um bilhão de funcionalidades. De vez em quando eu me deparo com algumas necessidades bem específicas, como por exemplo: redimensionar todas as fotos que eu tirei dos bêbados da noite passada, pra eu por em algum lugar sem ter que precisar dar upload de 3MB por foto.

Este tutorial se torna então uma referência para algumas das tarefas que podemos fazer com imagens usando o ImageMagick. E além disso, vou sempre tentar expandir o conteúdo quando for surgindo mais tarefas, assim como eu faço na página de Comandos Linux.

Obtendo a ferramenta

Antes de mais nada, é necessário obter a ferramenta ImageMagick, que consiste em vários programas (comandos) separados, cada um com uma função (o bom e velho modo Unix de fazer as coisas). O site do ImageMagick é o seguinte:

Você pode pegar uma versão em código-fonte e compilar manualmente, o que é um pouco mais demorado de se instalar. Se você usa Windows, baixe diretamente a versão instalável (binária) para Windows. Mesma coisa para o caso do MacOS X.

Se você usa Linux, então o ImageMagick provavelmente já está incluso em sua distribuição. Neste caso, o nome do pacote é geralmente imagemagick (Debian-like) e ImageMagick (RH-Like). Geralmente os comandos da ferramenta vão parar no /usr/bin.

Enquanto escrevo este tutorial, os seguintes comandos do ImageMagick estão disponíveis:

  • animate – Anima imagens e mostra na tela
  • compare – Compara matematicamente e visualmente duas imagens
  • composite – Adiciona uma imagem em cima da outra
  • conjure – Interpretador de scripts em linguagem Magick (MSL)
  • convert – Converte e altera imagens em diversos formatos e formas
  • display – Mostra imagens ou sequências de imagens na tela
  • identify – Mostra informações e características de uma imagem
  • import – Salva o conteúdo da tela em um arquivo (famoso print-screen)
  • mogrify – Mesma coisa que o convert, só que sobrescreve os arquivos que está trabalhando
  • montage – Junta várias imagens em uma só
  • stream – Extrai porções e/ou pixels das imagens e salva em outro local

(Quando no Windows, estes mesmos nomes estão disponíveis, mas com a extensão .exe.)

Observação pessoal do autor: Eu ainda me lembro que, sem saber na época, o comando import foi um dos primeiros comandos de Linux que aprendi depois que iniciei o servidor X pela primeira vez, em 1997, servindo justamente para fazer uma captura de tela e mostrar pra todo mundo que eu estava usando Linux (fvwm95).

Convertendo e Editando imagens

Apesar dos vários comandos disponíveis, o que mais usaremos aqui é o convert.

Convertendo imagens de um formato para outro

  • De JPEG para PNG:
$ convert imagem.jpg imagem.png
$ identify imagem.jpg imagem.png
imagem.jpg JPEG 256x256 256x256+0+0 DirectClass 8-bit 6.33594kb
imagem.png[1] PNG 256x256 256x256+0+0 DirectClass 8-bit 23.2344kb</pre>

(O comando identify foi só para mostrar os tipos de imagem.)

Note também que ele não sobrescreve o arquivo anterior, e sim cria um novo. Qualquer operação que iria sobrescrever o arquivo original tem que ser executada com o comando mogrify ao invés do convert. A não ser que você tenha uma razão bem específica, eu não recomendo fazer isto ;)

  • De PNG para GIF:
$ convert imagem.png imagem.gif

(Esteja ciente de que às vezes o GIF fica com pior qualidade que o PNG)

Ou seja, basta especificar sua extensão que o convert faz a conversão para o formato adequado.

Redimensionando imagens

  • Reduzindo uma imagem para a metade do seu tamanho:
$ convert -resize 50% imagem.jpg metade_da_imagem.jpg

Redimensiona a imagem.jpg pela metade e salva no arquivo metade_da_imagem.jpg. O 50%, obviamente, pode ser substituído por outra porcentagem para diminuir/aumentar a imagem no aspecto relativo correto.

  • Reduzindo para um tamanho específico:
$ convert -resize '800x600' foto.jpg destino.jpg

Redimensiona a foto.jpg para 800×600 (aumenta ou diminui) e salva em destino.jpg.

  • Redimensionando todas as imagens de um diretório:

O convert aceita os coringas (wildcards) da shell, ou seja, o asterisco (*) pode representar tudo:

$ convert -resize 50% *.jpg

Ele vai converter todos os arquivos que terminam com .jpg do diretório atual e o resultado ele salva em outros arquivos com terminação -0, -1, -2, etc. Pode ficar um pouco confuso essa nomeclatura no final das contas.

Então neste caso, é melhor a gente usar o comando mogrify com a opção -path, assim:

$ mkdir -p resultado
$ mogrify -path resultado -resize 50% *.jpg

Todos os arquivos que terminam com .jpg do diretório atual serão redimensionados para 50% de seu tamanho e armazenados com o mesmo nome no diretório resultado. Uso isto bastante para reduzir as imagens que baixo de cameras digitais de alta qualidade. Não se esqueça do -path! Se você se esquecer, as imagens originais serão perdidas!

Outro jeito de fazer o mesmo, agora utilizando o convert e shell-script:

$ mkdir -p resultado
$ for IMAGEM in *.jpg ; do convert -resize 50% $IMAGEM resultado/$IMAGEM ; done

Mexendo na qualidade

Em alguns formatos como o .jpg, é possível mexer na qualidade da imagem, que impacta também no tamanho da mesma. Exemplo:

$ convert -quality 80% imagem.jpg

Converte a qualidade da imagem.jpg para 80%.

Rotacionando imagens

É possível rotacionar as imagens automaticamente, com o angulo desejado. Por exemplo, vamos rotacionar nos angulos 90, 180 e 270 graus, que correspondem a “deitar a imagem” e a virá-la de cabeça pra baixo:

$ convert -rotate 90 foto.jpg foto90g.jpg
$ convert -rotate 180 foto.jpg foto180g.jpg
$ convert -rotate 270 foto.jpg foto270g.jpg

Resultados:

Criando thumbnails

Quando queremos criar uma galeria de imagens em uma página, é legal criar thumbnails (miniaturas) destas imagens, para o usuário pré-visualizar, clicar e ver o tamanho real. É uma boa visão geral de todas as imagens e ainda economiza espaço e banda na hora de visualizar.

A melhor forma de se criar thumbnails, é utilizar a opção -thumbnail ao invés do -resize. Eles fazem praticamente a mesma coisa, mas a opção -thumbnail também remove informações dentro da imagem que não são úteis em thumbnails.

$ mkdir -p thumbnails
$ mogrify -path thumbnails -thumbnail '100x150' *.jpg

Todas as imagens com extensão .jpg serão redimensionadas para 100×150 pixels e jogadas em um diretório chamado thumbnails, com o mesmo nome. Mais uma vez, não se esqueça da opção -path ou você pode perder todas as imagens originais.

Agora gerando thumbnails com apenas a largura fixa, isso significa que a altura pode variar de acordo com a foto.

$ mkdir -p thumbnails
$ mogrify -path thumbnails -thumbnail '100x150>' *.jpg

Se você está fazendo isso com fotos que vem de cameras digitais, dentro da imagem geralmente tem uma informação se a imagem deve ser rotacionada caso você tenha tirado a foto com a câmera em pé. Neste caso, a opção -auto-orient se torna bastante útil pois rotaciona pra você:

$ mkdir -p thumbnails
$ mogrify -path thumbnails -thumbnail '100x150>' -auto-orient *.jpg

Um último exemplo de geração de thumbnail, que peguei na documentação do ImageMagick, é criar uma “borda” no estilo foto polaroid:

$ convert -thumbnail '100x150>' -bordercolor snow -background black \
          +polaroid foto.jpg foto_thumbnailpolarid.png

Observe que ele girou um pouco a imagem, colocou um efeito “tipo papel” e ainda converteu para .png com transparência.

Também tem outras ténicas bem interessantes:

$ convert -thumbnail '100x150>' -matte -background none \
          -vignette 0x4 foto.jpg foto_thumbnail2.png
$ convert -thumbnail '100x150>' -matte -virtual-pixel transparent \
          -channel A -blur 0x8  -level 0,50% +channel foto.jpg thumbnail_softedge.png

Estes efeitos também podem ser aplicados não apenas paraos thumbnails, mas para as imagens originais também. Basta remover o -thumbnail.

Diversos exemplos a mais de como criar thumbnails, você encontra na página oficial:

Extendendo o uso do ImageMagick em outras aplicações

Além de todos estes comandos e ações que o ImageMagick proporciona, ele também pode ser aplicado diretamente em outros programas, em diversas linguagens de programação, através de sua API. No momento que eu escrevo este tutorial, a API está disponível para as seguintes linguagens/métodos/toolkits:

Ada, C, Ch, COM+, C++, Java, LabVIEW, Lisp, Neko, .NET, Pascal, Perl, PHP, Python, Ruby, Tcl/TK, XML-RPC.

Para mais informações consulte a página de API do ImageMagick:

Referências

Grande parte deste artigo foi aprendido (além das páginas de manual) através da página oficial de documentação do ImageMagick, que é muito, muito, muito completa. O endereço é:

Considero este tutorial então, uma versão tímida e em português do uso do ImageMagick ;-)

72.632

Comentários  12
Visualizações  
72.632


TagsLeia também

Apaixonado por Linux e administração de sistemas. Viciado em Internet, servidores, e em passar conhecimento. Idealizador do Devin, tem como meta aprender e ensinar muito Linux, o que ele vem fazendo desde 1997 :-)


Leia também



Comentários

12 respostas para “Tratamento de imagens com ImageMagick”

  1. Mesmo em PHP eu prefiro executar o ImageMagick por linha de comando (para usar a memória externa).

  2. […] assim, publiquei o tutorial Tratamento de Imagens com o ImageMagick para ter uma referência em português pra esses tipos de atividades executadas via linha de […]

  3. Cara, muuito bom e muuito util seu Artigo !

    Valeu mesmo .. agente sempre necessita fazer isto, a gora nao precisaremos ficar baixando diversos programinhas…

    hehehe

    Valeu !

  4. Contruibuindo da minha parte,no caso de thumbnails ou fotos normais de preferência em .png para manter a qualidade você pode fazer um mosaico de fotos(lembrando sempre que tem de ser fotos das mesmas dimensões para não ficar com falhas

    ex: $ montage -geometry +0+0 -background transparent -bordercolor transparent 1.png 2.png mosaico_de_fotos.png

    para fazer em lote

    montage -geometry +0+0 -background transparent -bordercolor transparent *.png mosaico_de_fotos.png

    vejam como fica http://www.4shared.com/file/117110330/15c49dcc/Sa

    e fica também meu diretório a disposição

    http://www.4shared.com/u/pgkkmzrg/cd63dbd1/superl

    até mais!!

  5. @anderson freitas:

    Show de bola a dica! Obrigado!

  6. Mais uma dica agora de marca dagua numa foto inteira!!

    $ composite -dissolve 15 -tile

    1.png 2.png marca_dagua_foto_inteira.png

    marca d'agua foto inteira interessante efeito

    1.png= foto do peixe

    2.png= foto da modelo Sandra

    -dissolve 15 ,aquí você escolhe a opacidade do logo do peixe(exemplo) de 0 a 99

    o resultado está aquí no link

    http://www.4shared.com/file/117266606/c09e58b3/Sa

    até mais!!

  7. E agora vai o script para colocar marca dagua em massa nos 4 cantos da foto mais central,vai com uma foto mais o logo LINUX+ para teste.

    Aonde

    -fill grey50= escala de cinza

    -colorize 0 miff= com mais ou menos cor

    composite -dissolve 73= opacidade do logo

    convert 628×138-bl.png= 628×138-bl.png(este é o logo que vai servir como marca dagua) ele vai ficar na parte de baixo a esquerda da foto

    você tera de fazer a modificação no script para escolher aonde quer o logo mais os tons de escala desejado!

    para usar o script abra um terminal e

    $ ./con.sh

    link para a marca aplicada na foto Virginia_Model_1.jpg

    http://www.4shared.com/file/117276942/95a33723/Vi

    link do script

    http://www.4shared.com/file/117278934/d35e73e2/sc

    até mais!!

  8. Marcolinux disse:

    Lembrando tambem que o imagemagick trabalha com pdf. Pode-se fazer thumbnails por exemplo. Pouco usado mas uma mao na roda quando preciso.

    Ex:

    convert foo.pdf pages-%03d.png

    Gera varios pings para cada pagina do pdf.

    Fonte:(20090711 )http://www.ibm.com/developerworks/library/l-graf2/

    HTH,

    Marcolinux

  9. Elton Dhiego disse:

    Parabéns pelo trabalho. As vezes preciso abrir o gimp pra fazer uma série de modificações que foram explicadas aqui, sendo que com esse aplicativo posso fazer tudo de vez e rapidinho …

  10. Mônica Paz disse:

    Eu já add na minha pasta de utilidades ;-)

    bjs

  11. 4l3m4oO disse:

    Aproveitei mais 20% da minha vida com esta ferramenta =P

  12. Rodrigo T. disse:

    Cara, realmente muito dez seu resumo! Pra quem quer só resolver um problema rápido foi uma mão na roda. Valeu!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *