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.