Fa�a magia com imagens na Shell
ArticleCategory: [Es gibt verschiedene Artikel Kategorien]
Graphics
AuthorImage:[Ein Bild von Dir]
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]
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.
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.
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:
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
- Instala��o: Provavelmente o ImageMagick j� est� instalado no seu
sistema pois est� inclu�do na maioria das distribui��es Linux. Mas no caso
de pretender uma vers�o mais recente pode fazer download a partir de:
http://www.imagemagick.org/
- Para mais informa��o acerca dos utilit�rios do ImageMagick voc�
pode consultar as p�ginas man (e.g. digite man convert para encontrar mais
sobre o utilit�rio convert) ou leia o mesmo texto na p�gina web.
- Se n�o est� familiar com a programa��o da shell ainda, deixe o
google pesquisar por bash e deve encontrar v�rios tutoriais acerca da
programa��o da shell que servir�o para as suas necessidades. Ou pode
esperar pela pr�xima edi��o da LinuxFocus e ler o artigo acerca da
Programa��o da Shell.