⚠️ Este é um site de tradução não oficial, sem relação com a ImageMagick Studio LLC. Para informações oficiais, consulte a página original (https://usage.imagemagick.org/index.html).

Exemplos de uso do ImageMagick

ImageMagick versão 7

Estas páginas reúnem exemplos de uso do ImageMagick (abreviado como "IM") versão 7 a partir da linha de comando. Muitos deles também possuem uma forma de escrita que corresponde diretamente à versão legada, a versão 6. Além disso, mostram o que é possível fazer com a interface de programação de aplicações (API) do ImageMagick. Depois de ler o conciso manual de opções da linha de comando (CLI), o objetivo é que esta seja a primeira página que um usuário de IM deve visitar.

Na rede, a mesma pergunta — "como faço para…?" — é feita repetidas vezes. Esperamos que estas páginas consigam responder à maior parte das dúvidas comuns do tipo "como fazer".

Sites relacionados: Fred's ImageMagick Scripts / RubbleWebs (usar o IM CLI a partir do PHP) / Snibgo's ImageMagick pages / Site oficial do ImageMagick

ℹ️ Esta página é uma tradução não oficial de usage.imagemagick.org (IM Examples, por Anthony Thyssen). Para a tradução em japonês da documentação principal do ImageMagick, consulte a documentação do ImageMagick em japonês.

Exemplos práticos (Practical Examples)

Uso básico
Comandos básicos e manipulação de imagens
Manipulação de arquivos de imagem
Leitura e escrita de imagens
Principais formatos de imagem
Manipulação de imagens GIF, JPEG e PNG
De texto para imagem
Converter texto em imagem
Efeitos compostos de fonte
Estilos e técnicas de desenho de fontes
Anotação de imagens
Rotulação e sobreposição de imagens
Miniaturas e molduras
Pequenas imagens de referência de fotos grandes
Processamento de fotos
Processar fotografias
Correção de lente
Corrigir distorções de fotos
Montagem (arranjo)
Indexação e arranjo de imagens
Camadas de múltiplas imagens
Combinar várias imagens
Fundamentos de animação
Criar e estudar animações
Otimização de animação
Reduzir o tamanho de animações GIF
Modificação de animação
Alterar e mesclar animações
Manipulação de vídeo
Trabalhar com imagens de vídeo real
Comparação de imagens
Comparar duas ou mais imagens
Técnicas avançadas
Manipulações complexas de imagens
Exemplos de fundo
Exemplos de criação de fundos aleatórios
Repositórios de distribuição
Links para outros scripts e informações de IM
Índice de referência
Índice rápido de opções específicas
Scripts auxiliares
Scripts de shell usados nos exemplos

Técnicas básicas (Basic Techniques)

Criação de telas
Criar telas e imagens de fundo
Fundamentos de cor e canais
Manipulação de cores de baixo nível
Modificação de cores
Modificações comuns de cor
Máscaras e remoção de fundo
Manipulação do canal alfa e da transparência
Redução de cores e dithering
Reduzir o número de cores
Recorte e bordas
Fatiar, recortar, emoldurar e aparar
Redimensionar e escalar
Ampliar e reduzir imagens
Filtros de reamostragem
Controlar o redimensionamento de imagens
Composição de imagens
Sobrepor e mesclar duas imagens
Desenho em imagens
Gráficos vetoriais, imagens MVG e SVG
Deformações simples de imagem
Inverter, girar e torcer
Transformações de distorção de imagem
Como num salão de espelhos de parque de diversões
Transformação de imagem
Alterar bastante a aparência da imagem
Efeitos de mapeamento de imagem
Efeitos de lente, vidro e ondulação
Desfoque e nitidez
Desfocar, aguçar e sombras
Morfologia
Usar a vizinhança de pixels
Convolução
Processamento de vizinhança por média ponderada
Transformada de Fourier
Modificar imagens no domínio da frequência
Antisserrilhamento
Efeitos e problemas do antisserrilhamento
Diversos
Pequenas coisas variadas
API, scripts e compilação
Uso em outros ambientes
Uso no Windows
IM em PCs com Windows
Desenvolvimento e bugs
Propostas de desenvolvimento e bugs, antigos e novos

Exemplos de uso do ImageMagick — Introdução

O que é o ImageMagick (um resumo sem rodeios)

O ImageMagick foi projetado para o processamento em lote de imagens. Ou seja, você pode combinar operações de processamento de imagem em scripts (shell, DOS, Perl, PHP etc.) e aplicá-las a um grande número de imagens, ou usá-las como subsistema de outra ferramenta, como aplicações Web, ferramentas de processamento de vídeo ou geradores de panoramas. Não é um editor de imagens GUI.

O ImageMagick é, antes de mais nada, um conversor de imagem para imagem. Esse foi o seu propósito original de projeto. Isto é, ele converte praticamente qualquer formato de imagem (avise-nos se houver algum que ele não consiga) para qualquer outro formato de imagem.

Mas, ao mesmo tempo, é também uma biblioteca de algoritmos de processamento de imagem. É possível acessá-la pela linha de comando e por scripts de shell/DOS (o que estas páginas de exemplos mostram), ou por diversas linguagens de programação, como C, C++, Perl, Ruby, PHP e muitas outras. Consulte a API do ImageMagick.

A velocidade não é a principal característica do IM; ele dá mais ênfase à qualidade das imagens que gera. Isso não significa, porém, que ele não consiga converter imagens em um tempo razoável. Apenas não é espantosamente rápido. Por isso, especialmente ao tentar comprimir para formatos de imagem de capacidade limitada, o IM pode levar tempo em determinados processamentos.

O ImageMagick lida principalmente com imagens na forma de um arranjo retangular de pixels (em geral chamado de "rasterizado"). Ele também consegue lidar com formatos de imagem "vetoriais", como Postscript e PDF, mas ao preço de convertê-los em rasterizado na leitura e de gerar um invólucro de imagem vetorial ao redor do rasterizado ao salvar. Como resultado, as imagens vetoriais tendem a ser tratadas de forma inadequada com as configurações padrão. No entanto, é possível melhorar essa situação com opções específicas. Consulte Uma palavra sobre formatos de imagem vetorial.

Sobre estes Exemplos de uso do ImageMagick

Estas páginas são uma evolução e continuação da coletânea de dicas e truques do ImageMagick que comecei a escrever em 1993 e coloquei na então recém-surgida World Wide Web, mais ou menos na mesma época. Sobre muitos aspectos do IM, ainda permanecem naquele documento informações que não estão incluídas nestas páginas. Contudo, enquanto esta página foi feita para ser vista por outras pessoas, a coletânea de dicas servia apenas como meu próprio lembrete. Por isso, em alguns lugares ela pode estar vaga ou desorganizada. Você é bem-vindo para navegá-la, aprender e enviar comentários.

Outros exemplos foram extraídos e desenvolvidos a partir de respostas a perguntas de usuários no fórum do IM, ou foram enviados como soluções para diversos problemas.

Aguardo com interesse sugestões e e-mails de outros usuários do IM. Em geral, essas mensagens levam à melhoria e à ampliação destas páginas de exemplos.

Ambiente de linha de comando

Todos os exemplos foram escritos pressupondo o uso de scripts BASH em sistemas UNIX, especialmente GNU/Linux. Por isso, alguns exemplos usam o laço "for-do" do shell. Muitos exemplos colocam uma contrabarra "\" no fim da linha para continuar o comando na linha seguinte. Comandos longos são divididos em várias linhas para destacar as etapas aplicadas.

Ainda assim, com uma pequena mudança no tratamento de certos caracteres, esses exemplos também podem ser usados a partir de scripts de lote do PC Windows. Com pequenos ajustes, também podem ser executados diretamente de uma chamada "system" dentro de um script PHP.

Para detalhes sobre o uso dos comandos do ImageMagick nesses ambientes alternativos, consulte Uso no Windows e API e scripts. Contribuições e exemplos de teste são bem-vindos.

PerlMagick e outras APIs

Todos esses exemplos também devem poder ser adaptados para usar a API do IM a partir de linguagens como Perl, C, C++, Ruby, PHP e outras. Recomendamos primeiro testar na linha de comando e fazê-lo funcionar corretamente, e só então converter a operação para a API específica que você estiver usando.

A situação melhorou bastante na versão 6 do IM, mas a linha de comando, na prática, lida com apenas uma sequência de imagens por vez. As APIs, porém, não têm essa limitação, podendo operar várias sequências de imagens individualmente ou em conjunto, realizando processamentos mais complexos. Graças a essa capacidade, implementar estes exemplos usando a API do IM fica mais fácil, e também se torna desnecessário salvar imagens em arquivos temporários, algo exigido por muitos exemplos de linha de comando. Ao usar uma API, basta gravar em disco apenas as imagens permanentes ou semipermanentes.

Basicamente, é recomendável usar as páginas de exemplos como ponto de partida para descobrir o que é possível fazer com o ImageMagick, montar primeiro o que você quer fazer na linha de comando e, só depois, transpô-lo para scripts ou código de API que são mais difíceis de alterar.

Também recomendamos comentar fartamente o código de API e, sempre que possível, incluir junto o equivalente em linha de comando do que você está tentando fazer. Assim, você pode conferir e comparar com o resultado obtido pela linha de comando. Isso ajuda a depurar problemas que possam surgir mais tarde, especialmente quando o processamento de imagem da biblioteca Core do ImageMagick for aprimorado.

Imagens de entrada e download dos resultados

Sempre que possível, para a entrada dos comandos de exemplo do IM, procuro usar imagens embutidas no próprio IM (como "logo:" ou "rose:") ou gerar a imagem de entrada com um comando do IM. Também é comum reaproveitar a saída de um comando anterior em exemplos posteriores. Por isso, normalmente não é necessário baixar uma imagem de "teste" para você mesmo experimentar os exemplos.

Ainda assim, nem sempre essas imagens geradas ou embutidas são convenientes. Por isso, quando uso imagens externas, procuro reaproveitar essa imagem de entrada, ou o resultado de um exemplo anterior, nos exemplos seguintes da mesma seção.

Em alguns casos a imagem de origem original é exibida; em outros, para imagens grandes, é fornecido um link para a imagem de origem. Mais comumente, como a entrada é conhecida ou óbvia, apenas a imagem de resultado final é mostrada.

Quase todos os comandos de exemplo do IM exibidos foram executados no mesmo diretório Web em que estão publicados. Ou seja, o comando que você vê é o comando realmente usado para gerar aquela imagem. Por isso, alterando a URL da página, você pode baixar ou visualizar a imagem de entrada usada pelo exemplo. Cópias de reserva das imagens de origem externas também ficam nos subdiretórios "images" e "img_photos". Veja também o exemplo do Fancy Photo Index dessas imagens.

Quando um exemplo gera saída de texto ou informações de imagem, ela é salva em um arquivo de texto, e a respectiva imagem é gerada para exibição na página Web. Ao selecionar a imagem da saída de texto, você é levado a um link para uma cópia do texto que o comando realmente produziu.

Em todos esses exemplos, ao selecionar a imagem de saída você deve conseguir baixar a imagem que o comando de exemplo de fato criou. Observe, porém, que nem todos os navegadores conseguem entender todos os formatos de imagem usados.

Origem das imagens externas

A propósito, a maioria das imagens de origem usadas nestes exemplos vem da Anthony's Icon Library, em especial das seções de ladrilhos de fundo, clip-arts grandes e dragões da biblioteca (porque eu gosto de dragões!). Observação: essas páginas podem ficar fora do ar porque o site está migrando aos poucos para um novo servidor.

Essa biblioteca, na verdade, é anterior à WWW. Criei-a em 1991 porque havia falta de imagens de ícones bem feitas e limpas para uso no X Window System. O surgimento da WWW, claro, mudou esse cenário, mas minha biblioteca original ainda existe e, embora não cresça ativamente, continua disponível como fonte de imagens.

Determinadas imagens, ou partes de imagens maiores, foram contribuídas pelos autores de cada exemplo. Os autores desses exemplos estão indicados na seção de contribuições ou ao final da página.

Se você está procurando uma imagem específica, recomendamos encontrar algo adequado na busca de imagens do Google (ou similar). Claro que você pode converter e redimensionar tais imagens com o IM para os seus próprios fins. No entanto, se planeja uso comercial, fique atento aos direitos autorais.

Imagens PNG em páginas Web

[IM Output]

Em muitos exemplos, usamos imagens no formato PNG, como a mostrada à direita deste texto. O formato de imagem PNG suporta imagens com pixels semitransparentes, um recurso que poucos outros formatos de imagem oferecem. Além disso, é um formato muito bem compreendido, disponível na maioria dos programas de imagem e navegadores Web de hoje.

No entanto, alguns navegadores Web não tratam corretamente imagens PNG transparentes (em especial o Microsoft Internet Explorer v6). Por isso, em geral uso os formatos JPEG e GIF para imagens na Web, reservando o formato PNG apenas quando gero imagens com pixels semitransparentes ou quando preciso de cores exatas em exemplos posteriores.

Para fazer o navegador IE v6 exibir imagens PNG, uso uma "folha de estilo" especial com JavaScript complexo. Sobre isso, consulte PNG transparente para o IE. Tecnicamente, este é um problema apenas do IE, e não do ImageMagick.

Exibição de imagens na tela

Problemas de exibição também podem ocorrer ao mostrar imagens na tela. Por isso, recomendo o uso de um comando como o seguinte, que preenche por baixo da imagem um padrão "checkerboard" (tabuleiro de xadrez) para destacar os pixels transparentes e semitransparentes.

   magick composite -compose Dst_Over -tile pattern:checkerboard image.png x:

[IM Output]

A imagem exibida no exemplo acima é uma imagem de teste em formato PNG especial, gerada por um script de shell. Normalmente, esse comando envia o resultado para o seu monitor, e não para uma página Web como esta.

Olhando com atenção, dá para ver o padrão de tabuleiro de xadrez através das cores semitransparentes. Mas a imagem como um todo é completamente opaca. Por isso, essa técnica deve funcionar em todos os monitores, navegadores Web e visualizadores de imagem.

A partir do IM v6.0.2, o programa "magick display" faz algo semelhante a isso automaticamente. No entanto, parece que ele não trata dessa forma imagens que usam tabela de cores (ou seja, GIF). Usando o formato de imagem de saída "x:" como acima, é possível exibir a imagem diretamente na tela sem salvá-la. Para mais detalhes, consulte Exibir a saída na tela.

Uso de fontes

As fontes usadas nestes exemplos vêm de uma pequena coleção de fontes TrueType que encontrei e guardei para mim ao longo dos anos. Algumas são protegidas por direitos autorais, por isso não posso publicá-las online.

Ainda assim, você é bem-vindo para substituí-las por outra fonte que tenha à mão. Os exemplos devem funcionar com qualquer fonte adequada disponível no seu sistema (acompanhada de alguma variação no tamanho da imagem). A fonte "Arial" da Microsoft, ou ainda "Times-BoldItalic", deve funcionar na maioria dos sistemas.

Para verificar quais fontes estão disponíveis na sua versão do IM, execute o comando a seguir…

   magick -list font

Aviso: quando a fonte solicitada não é encontrada, o ImageMagick antigamente substituía silenciosamente pela fonte padrão (em geral Arial ou Times). Ele ainda faz isso, mas agora emite um aviso. Para garantir que é a fonte pretendida e não a padrão, teste a fonte de antemão.

No meu sistema Linux, uso um script Perl especial, "[**imagick_type_gen**](../static/img/scripts/imagick_type_gen)", para gerar um arquivo "type.xml" que salvo no subdiretório ".magick" do meu diretório pessoal. O ImageMagick usa esse arquivo, que contém uma lista de fontes em formato XML, para procurar as fontes. Esse script "locate" e descreve todas as fontes disponíveis no sistema (se você acabou de adicionar novas fontes, execute "updatedb" antes). Com essa configuração, basta especificar o nome da fonte que você quer usar, sem precisar do caminho completo para o arquivo de fonte específico.

Por exemplo…

   # Em vez de usar o comando a seguir…
   magick -font $HOME/lib/font/truetype/favorite/candice.ttf \
           -pointsize 72 label:Anthony  anthony.gif

   # você pode usar um rótulo de fonte mais simples…
   magick -font Candice -pointsize 72 label:Anthony  anthony.gif

Antes do IM v6.1.2-3, o arquivo "type.xml" se chamava "type.mgk". Atenção se você usa um IM mais antigo que isso.

As fontes usadas nestes exemplos de IM estão listadas no exemplo de montagem das fontes dos exemplos. Minha favorita pessoal é a Candice, por isso ela é usada com bastante frequência.

Se você gostar da fonte "Candice", ou de outras que eu uso, pode obtê-las em Free Fonts ou em 1001 Fonts .com.

Atualização das páginas de exemplos

Estas páginas de exemplos estão num ciclo de melhoria contínua. Em geral, quando minha atenção se volta para outra coisa, as adições às páginas podem ficar paradas por longos períodos.

Estes exemplos costumam ser reconstruídos com a versão beta mais recente do IM, para que eu possa verificar mudanças e bugs que possam surgir em cada versão do IM antes do lançamento geral. No entanto, as imagens de exemplo exibidas foram geradas no meu sistema pelos comandos de IM dados. Se você obtiver um resultado diferente, seu IM provavelmente é uma versão bem mais antiga (com bugs antigos) ou não está instalado corretamente.

Vale notar que e-mails para mim, ou discussões sobre o ImageMagick no fórum de discussão, em geral levam à adição de novos exemplos ou de seções inteiras a estas páginas. Quanto mais discussão, melhores ficam os exemplos.

Se você está fazendo algo interessante com o IM, por favor compartilhe e ofereça exemplos da sua técnica às demais pessoas da comunidade IM. Alguns dos maiores avanços no uso do IM nasceram de usuários como você.

Agradecimentos especiais

Agradecimentos especiais a Cristy, que passou meses trabalhando sem descanso em atualizações e correções de bugs, e que aturou minhas sugestões extravagantes… sobretudo minhas grandes propostas relativas a processamento da linha de comando, parênteses, operadores de sequência de imagens e processamento de animações GIF.

Ele fez um trabalho magnífico ao tornar a versão 7 o melhor e mais avançado programa de processamento de imagem por linha de comando disponível. A maioria dos usuários não vai demonstrar gratidão por isso, mas eu, sem dúvida, valorizo muito o esforço que ele dedicou ao IM.

Agradeço também a Gabe Schaffer, que ajudou enormemente em discussões sobre o formato e a biblioteca JPEG, os operadores de matriz afim e o Magick Vector Graphics em geral.

A Glenn Randers-Pehrson, que escreveu o módulo codificador de PNG e se interessava por redução de cores e dithering. Foi ele quem primeiro adicionou o dithering "halftone" ao IM, que eu depois revisei e estendi, acrescentando novos ditherings aos arquivos de configuração de dithering ordenado.

E, por fim, a um número enorme de pessoas que, em geral, espreitam no fórum de usuários do IM, com problemas, sugestões e soluções. Muitas delas agora figuram, ao longo de todo o IM Examples, como contribuidoras de ideias e sugestões.

Agradeço também às pessoas que respondem regularmente às perguntas no fórum. Por exemplo, "Bonzo" e seu site RubbleWebs, que detalha como usar comandos do IM a partir de scripts PHP. Também "scri8e" e seu site Moons Stars, sobre o tratamento de brilhos e estrelas. E a Pete "el_supremo".

Agradecimentos especiais a Fred Weinhaus. Pesquisador desde os primórdios do processamento de imagem, ele ajudou muito na implementação inicial do operador geral de distorção de imagem. Os scripts ImageMagick do Fred podem ser vistos no Fred's ImageMagick Site e frequentemente servem de prova de conceito para futuros recursos do IM.

A Nicolas Robidoux, especialista em processamento digital de imagem. Ele refez a reamostragem por média elíptica ponderada e melhorou enormemente a saída da distorção geral de imagem.

E, por fim, aos muitos usuários do ImageMagick que, no fórum e na Web, me permitiram mostrar a outras pessoas os comandos do IM que usaram como parte de algum projeto. A disposição e a franqueza de vocês em compartilhar suas descobertas são dignas de todo louvor.

Então, "chega de papo", vamos ver alguns exemplos.