|
|
Este artigo está disponível em: English Castellano Deutsch Francais Nederlands Portugues Russian Turkce |
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: |
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.
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:
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.convert -geometry 60x80 image.gif out.gifredimensiona a imagem image.gif para um comprimento de 60 e uma altura de 80 e escreve a imagem resultante em out.gif.
#!/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.)
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.
<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.
for f in $* ;do convert -geometry 80x80 $f t_$f echo "<a href=\"$f\"><img src=\"t_$f\" width=\"80\" height=\"80\">" doneA 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.
convert image.gif image.jpgO Convert sabe pela extensão do ficheiro o formato a utilizar.
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 doneExiste, ainda um número considerável de outros formatos que o ImageMagick conhece também.
combine -gravity SouthEast -compose Over img.jpg logo.gif stamp_img.jpgA 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.
identify image.jpg results in image.jpg 340x254 DirectClass 13939b JPEG 0.1u 0:01Que 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 340x254Agora 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 :
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!
|
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:
|
2001-08-30, generated by lfparser version 2.17