Fa�a magia com imagens na Shell

ArticleCategory: [Es gibt verschiedene Artikel Kategorien]

Graphics

AuthorImage:[Ein Bild von Dir]

[Photo of the Author]

TranslationInfo:[Autor und Übersetzer]

original in en Katja Socher 

en to pt Bruno Sousa 

AboutTheAuthor:[Eine kleine Biographie über den Autor]

A Katja � a editora alem� da LinuxFocus. Ela gosta do Tux, filme & fotografia e do mar. A sua p�gina pessoal pode ser encontrada aqui.

Abstract:[Hier sollte eine kleine Zusammenfassung stehen]

Neste artigo veremos alguns truques que os "experts" do ImageMagick conseguem fazer utilizando uma colec��o de utilit�rios gr�ficos como os ingredientes de base e a linha de comandos como a varinha m�gica.

ArticleIllustration:[Das Titelbild des Artikels]

[Illustration]

ArticleBody:

Fazendo Magia

Nos velhos tempos os "experts" tomavam os seus ingredientes de base, misturavam-nos num grande pote, agitando a sua varinha m�gica e murmuravam as suas palavras m�gicas... e de repente algu�m era transformado em sapo. Nos nossos tempos modernos os "experts" s�o como toda a gente na sociedade altamente especializada e os seus livros de truques s� cont�m alguns truques �teis para tarefas muito especificas. Ent�o o ImageMagick n�o � nenhum livro de truques para uso geral. Em muitos aspectos n�o consegue competir com o Gimp ou muitos outros programas gr�ficos mas possui especifica��es que s�o muito �teis.
A sua for�a real reside na possibilidade de automatizar um monte dos seus processos ao trabalhar em conjunto com a shell.

Mas antes de divulgarmos alguns truques demos uma vista r�pida pelos seus ingredientes de base primeiro:

Os ingredientes de base

ou O que � o ImageMagick?

O ImageMagick � uma colec��o de utilit�rios gr�ficos para trabalhar com imagens. Os utilit�rios s�o apresenta��o, importa��o, montagem, convers�o, "mogrify", identifica��o e combina��o.
Display: Se digitar "display &" uma janela de apresenta��o aparecer� e poder� trabalhar directamente na imagem. Atrav�s do menu pode abrir um ficheiro, guardar ou apag�-lo, translar ou rotacion�-lo, alteara a cor ou aplicar certos efeitos, e.g. implos�o / explos�o ("implode") enrelevando ("emboss") a figura ou por uma moldura � sua volta e mais.
Com o Import pode tirar "fotografias" do ecr� inteiro ou de certas imagens ou janelas.
Animate � um utilit�rio de anima��o. Pode seleccionar uma serie de imagens para serem apresentadas uma ap�s a outra ou pode ver um gif animado com.
Com Montage voc� pode e.g. criar uma imagem telhada ou obter uma imagem onde pode ver todas as imagens simples que comp�em um gif animado.
Convert � um utilit�rio muito poderoso. Pode converter uma imagem noutro formato e.g. uma imagem gif numa imagem jpg ou o inverso, pode alterar o tamanho de uma imagem e aplicar tamb�m imensos efeitos, e.g. efeito nas imagens de "characoal".
Mogrify � muito semelhante ao convert com uma grande diferen�a, � que o mogrify escreve por cima da imagem corrente enquanto com o convert e outros utilit�rios voc� tem de especificar um ficheiro onde a imagem alterada � salva. Por isso eu quase n�o a uso.
Identify d�-lhe informa��o acerca da imagem como a sua geometria, nome, formata��o, etc.
Combine combina duas ou mais imagens numa outra imagem. Voc� pode, por exemplo, meter um logo em cada imagem.

Para utilizar os utilit�rios digita o nome do utilit�rio, seguido da op��o que pretende usar, a imagem que � para ser manipulada e o nome do ficheiro onde pretende guardar as altera��es feitas � imagem.
E.g. se voc� pretende transformar o tux1.gif em "characoal" com um factor 3 e guard�-lo no tux1characoal.gif voc� escrever�:
convert -characoal 3 tux1.gif tux1characoal.gif

Ap�s esta vista de olhos pelos ingredientes de base vejamos alguns truques:

Alguns Truques

Alterando a altura e o comprimento das suas imagens

Imagine que voc� possui uma pilha de imagens com as �ltimas vitimas que voc� transformou em sapo e pretende p�-las na sua p�gina web. No sentido de reduzir o tempo de carregamento voc� quer tornar as suas imagens mais pequenas.
Com o utilit�rio convert voc� pode tornar as suas imagens maiores ou mais pequenas ou criar um �ndice com amostras ("thumbnails").
O comando
convert -geometry 60x80 image.gif out.gif
redimensiona a imagem image.gif para um comprimento de 60 e uma altura de 80 e escreve a imagem resultante em out.gif.

Para dar a todas as nossas imagens e.g. uma altura e um comprimento de 80 de um s� modo voc� escrever�:
#!/bin/sh
for f in $* ;do
 convert -geometry 80x80 $f t_$f
 echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\"></a>"
done
# end of script
(Edite estas linhas com o editor de texto da sua prefer�ncia (vi, emacs, nedit, kedit...) e salve com o nome mksmallimage no direct�rio pessoal. V� depois para a linha de comandos bash e digite
chmod 755 /home/katja/mksmallimage
(utilize o nome do seu direct�rio pessoal em vez de katja) Depois pode utilizar a script digitando home/katja/mksmallimage xxx.jpg *.gif convertendo todas os ficheiros gif e o ficheiros xxx.jpg.)

Criando vistas das imagens

Voc� tem um CD com uma colec��o de todas as pessoas que transformou em sapos no �ltimo par de anos. Agora o seu rival "expert" que tem ci�mes de si quer a prova em como tornou o seu c�o num sapo. E voc� passou o dia inteiro � procura daquela foto. Isto podia ter sido evitado se voc� tivesse uma vista de imagem com todas as imagens do seu CD. Com o ImageMagick � muito f�cil de criar uma:
display "vid:*.jpg" 
Isto gerar� uma imagem visual com todas as imagens jpg do direct�rio corrente. Ou:
display "vid:frog/*" 
gerar� uma imagem visual com todas as imagens no direct�rio frog.
Com o bot�o direito numa das imagens obt�m um menu onde pode seleccionar "Load" para ver a imagem no seu tamanho real.

[visual image directory]


Isto � um modo muito f�cil de criar uma vista de imagem mas dependendo do seu computador pode levar algum tempo para a imagem visual do direct�rio ser gerada e consome imensa mem�ria se tiver muitas imagens. Assim escreveremos uma pequena script htmlthumbnails que � agora menos exigente a este respeito e depois constru�mos uma p�gina web onde pode clicar em alguma amostra para obter a imagem original.

O c�digo html para isto � parecido com o que se segue:
<a href="file.gif"><img src="t_file.gif" width="60" height="80"></a>
O ficheiro original onde est� file.gif e a amostra � t_file.gif.
Agora escreveremos uma script que gerar� as amostras e escreve o c�digo html para n�s.
for f in $* ;do
 convert -geometry 80x80 $f t_$f
 echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">"
done
A script acima percorrer� todas as imagens especificadas na linha de comandos, gerar� as amostras e escrever� o c�digo html no ecr�. Podemos, depois, copiar e colar o c�digo html para a nossa p�gina web.
Para uma script completa adicion�mos algum texto de ajuda e verifica��o de erros. Aqui est� a nossa script final. chamada htmlthumbnails :
htmlthumbnails (html para ver), htmlthumbnails (texto para download)

Alterando o formato da imagem

O Convert pode n�o s� alterar o tamanho bem como o formato. E.g. pode alterar uma imagem gif numa jpg ou o inverso. O comando para fazer isto � simplesmente:
convert image.gif image.jpg
O Convert sabe pela extens�o do ficheiro o formato a utilizar.
Para alterar muitas imagens do formato jpg para o gif utilize:
for f in $* ;do
 if echo "$f" | grep -i "jpg$" > /dev/null ; then
   gif=`echo "$f" | sed 's/jpg$/gif/i'`
   echo "converting  $f to $gif ..."
   convert 80x80 $f $gif
 else
   echo echo "$f is not a jpg file, ignored"
 fi
done
Existe, ainda um n�mero consider�vel de outros formatos que o ImageMagick conhece tamb�m.

Pondo um logo em todas as suas imagens

Gostar�amos de adicionar um pequeno logo como aquele que consegue ver � direita a um n�mero de imagens. [linuxfocus stamp]

Este logo deve ser uma imagem gif pequena e transparente. O nosso logo devia ser colocado como uma pequena assinatura no canto direito mais baixo na imagem final, como pode ver na seguinte imagem Tux:

[tux with logo]

Qual � o comando para fazer isto?
O utilit�rio combine pode ser usado para combinar 2 imagens numa nova. V�rias op��es dizem ao programa como faz�-lo:
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpg
A op��o "gravity SouthEast" p�es o logo.gif no canto direito mais baixo. A op��o "compose Over" diz que substituir� a imagem pelo logo nos s�tios que se sobrep�em.

Para obter uma script totalmente funcional introduzimos um ciclo e de novo adicion�mos algum texto de ajuda e verifica��o de erros. Eis aqui a nossa vers�o final da script, chamada stampimages :
stampimages (html para ver), stampimages (texto para download)

Obtendo informa��o das propriedades das imagens

O Identify apresenta detalhes acerca do tipo das suas imagens, o seu tamanho e geometria. Parecido com o que se segue:
identify  image.jpg
results in
image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01
Que pode o nosso "expert" fazer com? Bem, para desenhar boas p�ginas web que apresentaram imagens enquanto a p�gina est� a carregar voc� devia especificar a geometria exacta de todas as imagens. O c�digo html � parecido com isto:
<img src="image.jpg" width="340" height="254" alt="[sample picture]">
Quando as nossas imagens t�m diferentes tamanhos e n�o sabemos a altura e comprimento exactos de cada uma podemos utilizar o identify para nos ajudar. N�s escrevemos uma script que ler� a sa�da do "identify" e imprimir� esta linha depois. A geometria da imagem � o segundo par�metro na string de sa�da do programa identify. Para obtermos este par�metro usamos o comando awk:
identify  image.jpg | awk '{print $2}'
results in
340x254
Agora temos de separar a geometria em altura e comprimento. Isto pode ser feito com:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $1}'
a qual d� o comprimento. A altura pode ser obtida com:
echo 340x254 | sed 's/[^0-9]/ /g' | awk '{print $2}'
N�o foque demasiado nos comandos exactos da shell. Se n�o os entende completamente ainda aceite-os como dados. Haver� um artigo acerca da programa��o da shell na pr�xima edi��o de LinuxFocus onde ser� explicada toda a sua magia. A script final � algo parecido com o que se segue:
file=$1
geometry=`identify $file | awk '{print $2}'`
# geometry can be 563x144+0+0 or 75x98
# we need to get rid of the plus (+) and the x characters:
width=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $1}'`
height=`echo $geometry | sed 's/[^0-9]/ /g' | awk '{print $2}'`
echo "<img src=\"$file\" width=\"$width\" height=\"$height\">"
Para obter uma script completa n�s adicion�mos texto de ajuda e verifica��o de erros. Aqui est� a nossa vers�o final da script, chamada imgsrcline :
imgsrcline (html para ver), imgsrcline (texto para download)


Ao trabalhar com o ImageMagick descobri, por vezes, discrep�ncias entre a documenta��o e a funcionalidade actual. Algumas especifica��es n�o s�o muito est�veis. Contudo se se restringir �s coisas demonstradas acima ver� que s�o �teis. As fun��es listadas acima trabalham. Eu usei o ImageMagick-4.2.9, o ImageMagick-5.2.9 e o ImageMagick-5.3.0 e as coisas aprendidas aqui trabalham em todas estas vers�es.

Espero que fique com a ideia do que pode fazer com o ImageMagick e utilize as scripts ou at� mesmo a criar os seus pr�prios truques de magia.
Divirta-se!

Refer�ncias