Arthur C. Clarke, escritor britânico de ficção científica, disse que “qualquer tecnologia suficientemente avançada é indistinguível da mágica”. Como profissionais que usam a tecnologia avançada atual, fica difícil dizer que as nossas ferramentas não parecem mágicas. Imagine alguém de um passado não muito distante nos vendo usar a tecnologia moderna -, fazendo uma mágica atrás da outra para fotografar, transferir, processar e finalmente imprimir imagens de amigos, parentes, bichos, locais de trabalho e de nós mesmos.
ImageMagick é um nome genérico e chamativo que foi dado a um conjunto de programas que permitem criar, editar, compor e converter imagens digitais em mais de cem formatos diferentes. As ferramentas propriamente ditas consistem em programas e bibliotecas distintas, que oferecem aos seus esforços de manipulação de imagens as opções mais amplas possíveis para realizar essas tarefas, operacional e programaticamente.
Este artigo tem ênfase principalmente no uso dos utilitários de linha de comando convert e display. O ImageMagick é um conjunto variado de ferramentas e, ao final deste artigo, você provavelmente terá uma boa impressão do conjunto.
O ImageMagick é um editor
Em termos amplos, um programa de computador chamado de editor se destina a facilitar a criação, modificação e salvamento de certos tipos de dados digitais. Há tantos editores quantos tipos específicos de dados digitais. Há editores de texto para documentos, código do programa e scripts. Vi e Emacs são exemplos bem conhecidos. Para os dados de áudio, há editores como Audacity e Wavosaur. O ImageMagick oferece um editor especializado para a edição de imagens gráficas.
Para criar imagens de bitmap
Como muitos outros editores de imagem, o ImageMagick oferece um ambiente interativo de edição de imagem. Entretanto, o ImageMagick oferece interface de programação de aplicativos (APIs) abrangentes e programáveis para que várias linguagens de programação padrão também as usem. A comunidade de programadores do ImageMagick forneceu muitos programas úteis que podem ser escolhidos para editar a funcionalidade imaginada.
Para descrever a funcionalidade de manipulação de imagem, as figuras são melhores que as palavras, e o website do ImageMagick oferece um bom conjunto delas para ilustrar o efeito que cada uma das funções oferece. Consulte “Recursos” para obter um link para mais informações sobre manipulação de imagem.
Para editar imagens de bitmap
Existem mais de cem formatos gráficos de imagem que são de uso comum. Dessa forma, para simplificar o processo de edição das imagens já existentes, o ImageMagick oferece o programa convert para converter de um formato a outro e também converter as imagens para uma forma que otimize o editor interativo do próprio ImageMagick.
Para incorporar imagens a projetos
Já que um dos pontos fortes do ImageMagick é o recurso de script, é possível escrever scripts customizados para facilitar a incorporação de imagens a projetos especiais. Um exemplo disso é a customização automática de um conjunto de imagens de material de marketing com os dados pessoais de um cliente em perspectiva – nome, endereço, números de telefone, etc.
Para ver esse recurso em ação, observe a imagem simples do gato da minha filha e do meu genro, que coincidentemente se chama Merlin.
Para dar um título bonito à imagem, o seguinte comando pode ser usado:
$ convert bMerlin.jpg -font Ubuntu-Bold-Italic \
-pointsize 56 -fill blue -annotate +25+70 \
'Merlin, the Wizard of Cats' NewMerlin.jpg
Observação: se o sistema não possui a fonte Ubuntu-Bold-Italic, use o comando a seguir para listar as fontes disponíveis:
$ convert -list font
Depois do processamento, é obtida a imagem mostrada abaixo:
Como é possível ver, não é difícil fazer mágica com o ImageMagick. Basta praticar para saber como usar a ferramenta. Os programadores (ou feiticeiros) que criaram o ImageMagick documentaram muito bem a ferramenta no website. Recomenda-se acessá-lo para aprimorar os conhecimentos obtidos com este artigo (consulte “Recursos”).
O ImageMagick é uma biblioteca de manipulação de imagens
A biblioteca de opções do programador com essa ferramenta eficiente é mais do que abrangente. Usando linguagens de programação bastante conhecidas, é possível incorporar a eficiência do ImageMagick por meio de APIs simples projetadas para cada linguagem. De scripts simples de bash dos comandos brutos do ImageMagick até a chamada de funções de API de linguagens, como C ou Perl, a programabilidade do ImageMagick o diferencia de muitas outras ferramentas de manipulação gráfica.
É possível optar por usar o editor interativo para fazer ajustes finos em uma imagem ou mudanças gerais em diversas imagens. O valor desse conjunto reside na capacidade de usar suas diversas ferramentas de edição.
Conversões entre formatos de imagem bastante difundidos
Existem mais de cem formatos diferentes de arquivos gráficos para imagens digitais. O ImageMagick permite contralar a situação da complexidade, porque pode trabalhar com muitos padrões diferentes.
O ImageMagick é móvel entre sistemas operacionais diferentes. Existem versões funcionais para Windows, UNIX e Linux, Mac OS X e Apple iOS. Este artigo tem ênfase na versão Ubuntu do Linux. Para fazer o download do código de origem ou da versão binária do seu sistema preferencial, consulte o link em Recursos.
Binário ou origem?
Como acontece com muitos sistemas de software livre, é necessário fazer uma escolha oficial ao obter o programa: compilar a partir do código de origem ou fazer o download de uma versão binária já compilada especificamente para o sistema. Os dois métodos oferecem vantagens, mas optamos por desenvolver o sistema a partir da origem.
Distribuição ou customizado?
Toda distribuição (ou “distro”) tem o seu próprio método de incluir binários pré-construídos. Para instalar o ImageMagick nas distribuições que descendem do Debian Linux, como o Ubuntu, usamos um dos gerenciadores de pacote baseados na interface gráfica com o usuário, como o Synaptic Package Manager, ou uma operação de linha de comandos como:
$ sudo apt-get install imagemagick
Também é possível customizar o ImageMagick de acordo com o seu gosto. Por exemplo, modificar o local onde ele espera que os arquivos de configuração estejam ou alguma configuração específica da criação. Para fazer isso, use os comutadores de opção da linha de comando ao desenvolver o ImageMagick a partir da origem. É possível listar essas opções com o comando configure da seguinte forma:
$ ./configure --help
Muitas dessas opções são úteis quando há problemas para criá-lo na máquina.
Construindo o ImageMagick a partir da origem
A criação da maioria dos programas de software livre para computadores baseados em *nix envolve três comandos, e o ImageMagick não é uma exceção. Os comandos padrão são:
- $ ./configure – O objetivo do script configure é criar um Makefile customizado para a próxima etapa. Ele executa metodicamente uma série de etapas para determinar a configuração da máquina e, em seguida, informa que alguma coisa crítica está faltando, como uma biblioteca necessária, ou que está tudo bem e o Makefile foi criado com êxito;
- $ make – O Makefile criado na etapa anterior é usado pelo programa make para desenvolver todos os programas que constituem o conjunto ImageMagick, juntamente com a documentação associada;
- $ sudo make install – O comando final copia os programas, a documentação e os arquivos de dados associados para o seu local permanente, onde todos os usuários do sistema esperam que eles estejam. Geralmente, isso significa o diretório /usr/local/bin.
Manipulação de imagens para os usuários
O ImageMagick é semelhante aos outros editores de imagem porque fornece um programa interativo para editar imagens. Depois de chamado, é possível acessar as ferramentas de manipulação de imagens acionadas por menu.
Criando imagens do zero
O editor interativo ImageMagick é chamado usando o comando display com ou sem um nome de arquivo associado. A interface é semelhante à de muitos outros programas de desenho, fácil de usar e acionada por menus.
Insira o comando display. É exibida a janela da figura a seguir:
Clique na janela e depois em File > New no menu para começar a criar a imagem de bitmap. Será necessário inserir a geometria da imagem e, em seguida, a cor do plano de fundo. Ao inserir a geometria da imagem, também existe a opção de usar uma gradação para as cores do plano de fundo.
Com a tela criada, é possível começar a usar as ferramentas de desenho para decorá-la. Clique em Image Edit > Draw. O modo é alterado, um novo menu é exibido e a funcionalidade do cursor da tela muda. Neste ponto, selecione uma ferramenta de desenho e coloque suas ideias na tela. É possível sair da funcionalidade Draw e das partes de Color da imagem, incluir efeitos especiais e ser criativo.
Editando imagens
É possível editar as imagens já existentes de várias formas. Ao inserir o comando display image-name , será possível usar o editor interativo descrito anteriormente, mas é possível usar as outras ferramentas do conjunto para manipular a imagem. O programa convert , por exemplo, oferece a capacidade de converter o arquivo de imagem para outro formato gráfico comum adequado para ambientes diferentes.
Para ver como isso é feito, usaremos um programa para gerar uma sequência de convites para uma “festa de gatos”. Esse programa tem a forma de um script de bash, então, inicie um xterm e crie o primeiro arquivo da seguinte forma:
$ touch catcards $ chmod a+x catcards
Depois de criar o arquivo de script e torná-lo executável, a próxima etapa é abrir o seu editor favorito (por exemplo, Vi, Emacs) e inserir o código do programa do script de bash mostrado na Listagem 1 no arquivo catcards.
---
#!/bin/bash
# A "catcard" bash script for demonstrating ImageMagick
# and generating invitations to a "cat party."
# 20111115 by Bill Zimmerly.
# Find the "seq" command, to generate sequence numbers.
SEQ=`which seq`
# Create the guests file. Comment this
# out if "guests" is an external file.
# (Important Note: "cat" in this script
# has nothing to do with cats!)
cat > guests << EOF
Grandma
Aunt Linda
Uncle Dave
Aunt Rachael
Uncle Joe
Uncle Myk
EOF
# Read the guests into an array called "a."
# (Note: IFS is the field separator value,
# which in this case MUST be set for lines.)
old_IFS=$IFS
IFS=