[LinuxFocus-icon]
Início  |  Mapa  |  Índice  |  Procura

Novidades | Arquivos | Links | Sobre LF
Este artigo está disponível em: English  Castellano  Deutsch  Francais  Nederlands  Portugues  Russian  Turkce  

convert to palmConvert to GutenPalm
or to PalmDoc

[Photo of the Author]
por Katja Socher

Sobre o 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.


Conteúdo:

 

Faça magia com imagens na Shell

[Illustration]

Abstrato:

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.



 

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

 

Forma de respostas para este artigo

Todo artigo tem sua própria página de respostas. Nesta página você pode enviar um comentário ou ver os comentários de outros leitores:
 página de respostas 

Páginas Web mantidas pelo time de Editores LinuxFocus
© Katja Socher, FDL
LinuxFocus.org

Clique aqui para reportar uma falha ou para enviar um comentário para LinuxFocus
Informação sobre tradução:
en -> -- Katja Socher
en -> pt Bruno Sousa

2001-08-30, generated by lfparser version 2.17