Exemplos do ImageMagick -- Formatos Comuns de Imagem
- Prefácio e Índice dos Exemplos do ImageMagick
- Um Breve Resumo dos Formatos Comuns de Arquivo de Imagem
- Formato de Arquivo de Imagem GIF
- Tabela de Cores Limitada do GIF
- Cor de Transparência do GIF
- Transparência Booleana do GIF
- GIFs sobre um fundo de cor sólida
- GIFs sobre um padrão de fundo
- GIFs para fundos não específicos (dithering de transparência)
- Processamento de GIF Fora do ImageMagick
- Tratamento de Offset do GIF
- Transparência JPEG - NÃO
- Distorção de Cor do JPEG
- Lendo imagens JPEG
- Escrevendo imagens JPEG
- Formatos de Saída JPEG Relacionados (Um resumo rápido)
- Processamento de JPEG Fora do ImageMagick (Um resumo rápido)
- Melhor compressão PNG
- PNG, Navegadores Web e Transparência
- PNG e a Tela Virtual
- Resolução, Densidade e Unidades do PNG
- Subformatos do PNG
- Controles para Escrever Imagens PNG
-
Mudando o Espaço de Cor de uma Imagem -- conversão RGB <=> CMYK
-
Uma Palavra sobre Formatos de Imagem Vetorial Outros Formatos de Arquivo de Imagem
Postscript (PS), PS Encapsulado (EPS), PDF,
PbmPlus/NetPBM (PBM, PGM, PPM, PNM, PAM),
TIFF, BMP, ICO, Imagem Digital RAW (CRW,CR2,etc),
MPEG, M2V e AVI, MNG, Digital Picture Exchange (DPX),
PSD, WMF, MacroMedia Flash (SWF),
Conversão de HTML de Página Web, Formato de Impressão PCL,
Formato Kodak PhotoCD (PCD), Dados RGB Brutos, Muitos dos formatos de arquivo de imagem têm particularidades que você precisa ter em mente ao usar aquele formato. Esta página trata dessas necessidades especiais, e de maneiras de melhorar os resultados nesses formatos.
Um Breve Resumo dos Formatos Comuns de Arquivo de Imagem
Para uma introdução à leitura e escrita de formatos de imagem, veja Formatos de Arquivo de Imagem. Já uma lista de todos os formatos de arquivo do ImageMagick é dada na Página de Formatos de Imagem do IM. Aqui está um resumo bem rápido dos formatos de arquivo de imagem 'normais' mais comuns, bem como suas vantagens e desvantagens gerais...
- GIF
- Este formato é extremamente comum, e existe há tanto tempo que todos os programas de manipulação de imagem o entendem. Mas usa apenas um número limitado de cores (uma tabela de 256 cores) e só salva usando qualidade de 8 bits. No entanto, sua codificação run-length embutida permite que ele salve imagens com poucas cores de forma muito eficiente. Embora o formato tenha transparência, ele só entende transparência Booleana (ligada/desligada) e, consequentemente, sofre de 'aliasing' ou 'serrilhados'. Texto simples com linhas finas sofre muito quando salvo como uma imagem GIF transparente. A única solução para este problema é vincular a imagem GIF a um fundo específico da página web em que ela é usada. O formato GIF pode salvar múltiplas imagens para formar uma sequência de animação e, para esse propósito, também salva o tamanho da tela da imagem e as informações de offset (página). Note, porém, que offsets negativos não são suportados, e tentativas de fazê-lo redefinem aquele offset para zero. Ele é melhor usado para imagens pequenas de desenhos animados, desenhos de linha e ícones pequenos, todos os quais têm cores limitadas, o que permitirá que ele comprima bem. Seu uso, no entanto, deve ser evitado quando um formato mais novo como o PNG estiver disponível.
- JPEG
- Não trata transparência de forma alguma. A imagem é equivalente a usar a operação "
[-alpha off](https://imagemagick.org/command-line-options/#alpha)" para remover o canal alfa, de modo que qualquer transparência de fundo comumente se torna preta, dependendo do processamento de imagem usado para gerar a imagem. Este formato também é 'com perdas', produzindo efeitos de borda em linhas e contornos nítidos e, portanto, não deve ser usado para nenhum processamento de imagem intermediário, ou para armazenamento de originais de imagem (a menos que já estivessem neste formato). Ele é bem adequado para armazenamento de longo prazo de fotografias da vida real, mas evite-o se você pretende processar a imagem ainda mais, ou se a imagem contém grandes áreas de cores sólidas. - PNG
- Este formato pretende eventualmente substituir formatos mais antigos como GIF e TIFF. É um formato moderno capaz de tratar qualidade de 16 bits com quatro canais de cor, permitindo o uso completo de cores semitransparentes. Ele também inclui um número enorme de opções de compressão de imagem sem perdas. Sua maior desvantagem é que ainda é relativamente novo, de modo que o navegador web Microsoft IE (v6) não o trata corretamente de forma automática. No entanto, uma correção está disponível para este problema. O formato não salva informações de tamanho da tela (onde o GIF salva), mas salva os offsets da tela e até offsets negativos (o que o GIF não faz), embora alguns navegadores web tenham problemas quando um offset negativo é usado, então isso não é recomendado para uma imagem final a ser exibida em um navegador. Para salvar imagens intermediárias 'em camadas', a capacidade de salvar offsets negativos pode ser muito importante e é muitas vezes muito mais importante do que o fato de não salvar informações de tamanho da tela.
- MNG
- Este é o formato multi-imagem para PNG, e permite animações com níveis e velocidade de qualidade de filme. Um exemplo simples de uso do MNG é desejado, então se você tiver um, envie-me por e-mail. O formato de animação MNG parece estar se tornando obsoleto e foi abandonado por alguns navegadores web como o FireFox.
- TIFF
- Este é o formato de intercâmbio de Imagem que foi desenvolvido para transferir imagens de alta qualidade entre programas antes que quaisquer formatos de imagem sérios estivessem disponíveis. Infelizmente, por causa desse início, o formato foi modificado com um conjunto desordenado de recursos e estilos de compressão e nenhum programa os entende todos. O formato agora é praticamente usado apenas pelo "
[Photoshop](http://www.adobe.com/products/photoshop/)" em plataformas windows, e esta é a única fonte que fornece qualquer tipo de referência padrão para o formato de imagem TIFF. Arquivos TIFF podem tratar múltiplas imagens, embora poucas aplicações além do IM tratem TIFFs com múltiplas imagens. Em geral, a menos que o formato interno da imagem TIFF seja mantido relativamente básico, não há garantia de que um arquivo TIFF gerado por um programa seja utilizável por outro programa, incluindo o IM ou até o próprio "[Photoshop](http://www.adobe.com/products/photoshop/)". Como tal, eu não recomendo este formato, ponto final! Sugiro que você use algum outro formato que não TIFF (ou JPEG), especialmente para armazenamento de longo prazo de imagens. As poucas notas que tenho sobre este formato e seus problemas estão fornecidas abaixo na seção Formatos Diversos, TIFF. Estas notas de uso foram encontradas nas listas de e-mail e fóruns do IM, já que eu mesmo não uso nem preciso usar TIFF. - Formatos de Vídeo
- Outros formatos de animação com qualidade de filme geralmente baseados no uso de compressão com perdas para reduzir o tamanho (e a qualidade) do filme. Ambos os formatos estão em um estado constante de mudança, melhorias e recursos limitadores de segurança, tornando qualquer forma de processamento difícil. Na última contagem havia mais de 200 'codecs' de formato de vídeo em uso geral para um propósito ou outro. Por causa disso, o IM não trata este formato diretamente; em vez disso, ele depende de outros pacotes de software para tratar o processamento dos quadros individuais para dentro e para fora das animações. Esses programas 'delegados' incluem "
mpeg2decode", "mpeg2encode" e "mplayer". Veja MPEG, M2V, e AVI abaixo).
| Alguns sistemas (como o ubuntu) desabilitam o uso de formatos de arquivo de imagem específicos usando uma política de segurança. Digitemagick -list policy para ver quais políticas e de onde elas são definidas estão presentes no seu sistema.
---|---
Formato de Arquivo de Imagem GIF
O formato GIF é um formato de arquivo de imagem amplamente conhecido, já que existe há muito muito muito tempo (desde o final dos anos 1980). Ele é frequentemente escolhido para imagens que serão exibidas em páginas web que envolvem transparência ou animação de imagem. É também praticamente o único formato absolutamente entendido por todos os navegadores web universalmente. Infelizmente, não é um formato muito bom para nada além de desenhos de linha, figuras, diagramas e desenhos animados. Isto é, porque ele é limitado a um máximo de 256 cores, uma das quais é geralmente marcada como sendo transparente. Marcar uma cor específica na imagem como transparente tem alguns inconvenientes. Se a cor a ser usada como transparente for mal escolhida, isso pode resultar em outras partes da imagem ficarem transparentes quando isso não era intencional. É preciso ter cuidado para garantir que isso não aconteça. Além disso, a capacidade de transparência é 'Booleana', o que basicamente significa que ela está totalmente ligada ou totalmente desligada. Cores semitransparentes simplesmente não são possíveis e, se presentes, precisam ser tornadas transparentes ou opacas. Isso significa que o formato não pode fornecer qualquer forma de anti-aliasing das bordas de uma imagem, geralmente resultando em um caso ruim de 'serrilhados'. (Veja Anti-Aliasing) Como as limitações de cor dos formatos de imagem "GIF" causam tantos problemas, especialmente para um pacote de processamento de imagem de alta qualidade como o ImageMagick, eu gostaria de dizer de antemão...
Evite o formato GIF, se for possível.
Se você precisar usá-lo, faça-o apenas como o passo final.
Finalmente, por muito tempo o algoritmo de compressão usado pelo GIF foi patenteado. Consequentemente, ele não estava disponível para uso por muitos programas de processamento de imagem, como o ImageMagick. Assim, programas IM muito antigos produziam imagens em formato GIF sem compressão e, portanto, usando mais espaço em disco do que deveriam. Você pode corrigir isso usando um programa de compressão em lote de GIF como o "**[Gifsicle](http://www.lcdf.org/gifsicle/)**" ou o "**[InterGIF](http://utter.chaos.org.uk/~pdh/software/intergif.htm)**". No entanto, como a patente expirou completamente em meados de 2004, a versão atual do IM tem a compressão de imagem GIF reativada novamente. A compressão de imagem também é bastante simples, e funciona melhor em imagens com grandes áreas de cores sólidas e imutáveis. Ou em padrões repetidos simples do mesmo conjunto de cores, como você obtém usando Dithering Ordenado (não o dither padrão no IM). Finalmente, imagens GIF podem salvar múltiplas imagens em um único arquivo. E isso é usado para gerar Animações GIF como entendidas por praticamente todos os navegadores web, já que a técnica foi introduzida pela primeira vez pelo navegador muito antigo "Netscape". Em Resumo O formato de arquivo de imagem GIF, com sua tabela de cores limitada, transparência Booleana e compressão simplista (se habilitada), o torna ideal para imagens pequenas, como miniaturas, e especialmente imagens de ícones, logotipos e símbolos do tipo "desenho animado" com grandes áreas de cores sólidas. Suas capacidades de animação também o tornam um método ideal para gerar logotipos e anúncios chamativos que chamam a atenção, que você vê por toda a World Wide Web. Para qualquer outra coisa, suas limitações o tornam um formato de arquivo de imagem ruim e talvez seja melhor mudar para JPEG, PNG, ou um formato de imagem de vídeo para suas necessidades.
Tabela de Cores Limitada do GIF
FUTURO: exemplos de redução de cor -- referenciar dithering básico de cores
Garantir que uma cor específica esteja presente na imagem GIF final
Mapear tabelas de cores para reduzir cores.
Veja [Quantização de Cor](quantize.html#colors).
Veja Scripting Avançado de Bullets 3-D para um exemplo de geração de múltiplas imagens ao longo de uma faixa de cores. Esta técnica também pode ser usada para auto-magick sua imagem em múltiplas imagens para muitas cores e padrões de fundo diferentes.
Cor de Transparência do GIF
Por exemplo, aqui usamos identify para extrair a cor transparente, e a tabela de cores que um arquivo de imagem GIF específico usou para representar a transparência. O script perl extrai apenas os campos específicos de interesse (que podem ter múltiplas linhas). | |
magick identify -verbose hand_point.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Como você pode ver, uma cor cinza transparente ('#CCCCCC00') foi usada para esta imagem e esta cor tem sua própria entrada separada na tabela de cores. Você também pode ver que, embora esta imagem use apenas 5 cores (uma transparente), a tabela de cores usada é para 8 cores. isso porque o formato de arquivo GIF só pode usar uma tabela de cores cujo tamanho seja uma potência de 2. Isto é, a tabela de cores tem sempre 2, 4, 8, 16, 32, 64, 128 ou 256 entradas de cor de tamanho. Como tal, as últimas 3 entradas da tabela de cores não são usadas. Na verdade, elas apenas não são referenciadas. Em alguns casos, essas entradas não usadas podem não ser as três últimas entradas na tabela de cores, e poderiam de fato conter qualquer valor de cor. Você também pode de fato ter valores de cor duplicados, embora o IM normalmente remova quaisquer entradas de cor duplicadas se ele processar a imagem de alguma forma. A partir da versão 6.2.9-2 do IM (e em algumas versões mais antigas), o IM preservará a tabela de cores e, mais especificamente, o valor da cor transparente, sempre que ele ler, processar e escrever uma imagem GIF. | |
magick hand_point.gif -fill white -opaque wheat hand_white.gif
magick identify -verbose hand_white.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Como você pode ver, embora a imagem tenha sido modificada (todos os pixels de cor 'wheat' foram substituídos por uma cor 'white'), a cor transparente usada foi preservada. No entanto, se a imagem final não tiver transparência, a entrada da cor de transparência ('Alpha:') na tabela de cores é completamente removida. | |
magick hand_point.gif -background white -flatten hand_flatten.gif
magick identify -verbose hand_flatten.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Se você quiser mudar a cor transparente que o formato de arquivo GIF está usando, você pode usar a configuração de saída "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)" (adicionada no IM v6.2.9-2). Por exemplo... | |
magick hand_point.gif -transparent-color wheat hand_wheat.gif
magick identify -verbose hand_wheat.gif |\
perl -0777 -ne 's/^ //gm; \
print $& while /^(Colors|Alpha|Colormap):.*?(?=^\S)/gms'
Como você pode ver, embora o resultado não seja visivelmente diferente do original, a cor transparente foi alterada para uma versão totalmente transparente da cor 'wheat'. Se você olhar de perto, também verá que a imagem agora tem duas cores 'wheat' ou '#F5DEB3' em sua tabela de cores. Isto é, uma wheat transparente e uma wheat opaca. A partir da versão 6.2.9-2 do IM, isso não apresenta problema. Embora apenas uma cor transparente possa ser definida pelo formato de arquivo de imagem GIF. Por que você faria isso? Porque alguns navegadores web e programas gráficos muito antigos não entendem a transparência do GIF. Então esta opção permite que você defina qual cor as áreas transparentes devem ter nessa situação. Escolhas típicas para a cor transparente são 'white' para navegadores modernos, OU mais tipicamente 'grey75' ('#BFBFBF'), que era a cor de página original do navegador web "mosaic". Outras escolhas populares de cor transparente são 'grey' ('#BEBEBE') e 'silver' ('#C0C0C0'), que é o que a imagem da 'mão' acima usou. Isso mostra o quão popular aquela área específica da faixa de cores em escala de cinza é para a cor transparente. FUTURO: adicionar link para seleção de cor. |
Antes do IM v6.2.9-2, e da criação da configuração de saída "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)", o IM normalmente salvava a transparência de uma imagem como a cor especial 'none' (preto totalmente transparente), o que não é particularmente agradável quando a transparência falha. |
|---|---|
Note que definir "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)" NÃO adiciona qualquer transparência a uma imagem GIF, nem faz magick para que a cor especificada se torne transparente. Tudo o que a opção faz é especificar qual cor deve ser colocada na tabela de cores para o índice de cor que é usado para representar as cores transparentes em uma imagem GIF. Se você quiser mudar uma cor específica (exata) para se tornar transparente, então use o Operador de Substituição de Cor "[-transparent](https://imagemagick.org/command-line-options/#transparent)". |
Transparência Booleana do GIF
Como o formato GIF NÃO entende cores semitransparentes, e como o ImageMagick por padrão gera cores semitransparentes como parte de seus Métodos de Anti-Aliasing normais, quando você salva uma imagem neste formato ela frequentemente sairá com aparência horrível. Por exemplo, aqui eu desenho um círculo preto simples sobre um fundo transparente. Também vou gerar uma visão ampliada da borda das imagens, para deixar claro o que está acontecendo. Primeiro vou produzir a saída usando o formato PNG... |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' circle.png
magick circle.png -crop 10x10+40+3 +repage -scale 600% circle_mag.png
![[IM Output]](../static/img/formats/circle_mag.png)
Como você pode ver, a borda do círculo à esquerda, desenhada (no formato PNG), tem uma borda de aparência muito limpa (embora ligeiramente difusa) para a imagem. Você pode ver os pixels semitransparentes em sua ampliação. Agora vamos produzir a mesma imagem usando o formato de imagem "GIF"... |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' circle.gif
magick circle.gif -crop 10x10+40+3 +repage -scale 600% circle_mag.gif
![[IM Output]](../static/img/formats/circle_mag.gif)
O resultado é que o círculo tem um efeito de escada muito acentuado ao longo da borda externa do círculo, enquanto o interior permanece adequadamente com anti-aliasing. Basicamente, enquanto o formato PNG pode salvar informações de pixel semitransparentes, o GIF não pode. O formato de imagem GIF só pode salvar uma única cor puramente transparente. Em outras palavras...
O formato GIF tem uma transparência ligada/desligada ou Booleana
Se você olhar mais de perto o GIF resultante, descobrirá que os pixels semitransparentes poderiam ter se tornado totalmente transparentes ou totalmente opacos. | _O que o ImageMagick realmente faz com pixels semitransparentes depende exatamente de qual versão do IM você está usando. Por muito tempo isso não foi devidamente definido e o que uma versão fazia frequentemente dependia da última 'correção de bug' que foi aplicada devido a relatórios de bug dos usuários.
A partir da v6.2.9-6, o ImageMagick deve, por padrão, aplicar threshold à imagem em um nível de 50% tanto para os formatos de imagem GIF quanto XPM. Isso se tornou o padrão aceito como usado por manipuladores de imagem, ainda permitindo que você defina seus próprios métodos para lidar com os problemas de transparência do formato de arquivo GIF.
---|---
| _Por causa das limitações do GIF, o IM realiza o seguinte conjunto de operações antes de salvar para o formato de arquivo GIF...
_-channel A -threshold 50%
se pixels (totalmente) transparentes estão presentes, ele então...
-quantize transparent -colors 255
caso contrário, se nenhum pixel transparente estiver presente...
-colors 256_
_O processo de quantização -colors automaticamente não faz nada se menos cores que essa quantidade estiverem presentes na imagem. Nem fará nada se a imagem tiver um colormap válido (conforme atribuído por "+/-map").
Ele também não tenta usar um mapa de cores comum para arquivos GIF com múltiplas imagens. Como tal, se as cores forem muito diferentes de um quadro para o próximo, uma tabela de cores local pode ser adicionada a cada imagem individual salva no formato de arquivo GIF.
Além disso, as configurações usadas acima não são permanentes, apenas temporárias para a imagem sendo salva. Isto é, se você usou "-write image.gif", as configurações usadas durante o processo não afetam operações posteriores._
---|---
Você pode preferir fazer o thresholding você mesmo, e isso é recomendado se você não tiver certeza de qual versão do IM (especialmente versões mais antigas) você está usando. |
magick -size 60x60 xc:none -fill white -stroke black \
-draw 'circle 30,30 5,20' \
-channel A -threshold 50% circle_threshold.gif
magick circle_threshold.gif -crop 10x10+40+3 +repage \
-scale 600% circle_threshold_mag.gif
![[IM Output]](../static/img/formats/circle_threshold_mag.gif)
O exemplo acima realiza o mesmo "[-threshold](https://imagemagick.org/command-line-options/#threshold) 50%" no canal alfa que o IM agora faz automaticamente, isto é, se um pixel está mais de 50% transparente, ele será tornado totalmente transparente (usando a cor dada pela configuração "[-transparent-color](https://imagemagick.org/command-line-options/#transparent-color)" se definida). No entanto, você agora tem controle do nível do threshold como você quiser. Aplicar threshold ao canal alfa em 50% funciona bem para a maioria dos tipos de imagem. Especialmente aquelas com uma borda simples, mas a técnica falha de forma bastante grave quando você precisa lidar com grandes áreas de pixels semitransparentes. Isso é o que a maioria dos exemplos seguintes para tratamento de GIF irá examinar. Por exemplo, suponha que queremos salvar uma imagem com uma grande sombra difusa semitransparente como esta imagem (no formato PNG)... |
magick -size 70x60 xc:none -font Candice -pointsize 50 \
-fill black -annotate +10+45 'A' -channel RGBA -blur 0x5 \
-fill white -stroke black -draw "text 5,40 'A'" a.png
![[IM Output]](../static/img/formats/a.png)
Se você simplesmente fizer magick desta letra diretamente para o formato GIF ou até usar uma operação "[-threshold](https://imagemagick.org/command-line-options/#threshold)" para controlar a transparência Booleana, você ficará muito decepcionado. |
magick a.png a.gif
magick a.png -channel A -threshold 75% a_threshold.gif
![[IM Output]](../static/img/formats/a_threshold.gif)
A primeira imagem é uma gravação normal para o formato GIF, que como você pode ver aplicou threshold aos pixels semitransparentes em '50%', a segunda imagem teve threshold aplicado em '75%', permitindo que mais pixels semitransparentes se tornassem totalmente opacos (ou visíveis). Se você quiser apenas remover todos os pixels semitransparentes (EX a sombra), você poderia tentar algo como um "-threshold 15%", para remover praticamente todos os pixels semitransparentes. |
magick a.png -channel A -threshold 15% a_no_shadow.gif
![[IM Output]](../static/img/formats/a_no_shadow.gif)
A maioria das outras soluções para o problema da transparência Booleana do GIF é vincular inextricavelmente a imagem à cor de fundo da página web na qual ela está. Os métodos para fazer isso são complexos e delicados, e isso é o que veremos agora. GIFs sobre um fundo de cor sólida O que realmente gostaríamos é de, de alguma forma, preservar o sombreamento dos pixels semitransparentes e com anti-aliasing, e ainda exibi-lo bem na WWW. Para fazer isso, temos que ser um pouco espertos. A solução típica é combinar a imagem com o fundo no qual você vai exibir a imagem. Isso é simples de fazer, basta sobrepor a imagem sobre um fundo da cor apropriada, antes de salvá-la no formato GIF. Isso remove a necessidade de qualquer forma de transparência e a coisa toda se torna um não-problema. Claro que o número limitado de cores ainda é uma questão, mas frequentemente não é um grande problema. |
magick a.png -background LightSteelBlue -flatten a_overlay.gif
![[IM Output]](../static/img/formats/a_overlay.gif)
Veja, praticamente perfeito! Claro que, para este método funcionar corretamente, você precisa saber exatamente qual a cor de fundo sobre a qual a imagem será usada. Além disso, depois que terminarmos, a imagem não será muito boa sobre qualquer outro fundo. Um grande sacrifício a fazer. GIFs sobre um padrão de fundo Mas e se você estiver usando algum padrão como fundo, em vez de uma simples cor sólida? Você poderia tentar posicionar a sobreposição sobre uma cópia do padrão de fundo de modo que o padrão na imagem resultante combine com o padrão da página web. No entanto, isso exigiria muita tentativa e erro para fazer o fundo na imagem combinar com a página web. Além disso, você só poderia garantir que funcionasse para um navegador específico, e então apenas aquela versão específica do navegador. Não é uma boa ideia para uma página web, então nem se dê ao trabalho de tentar. Eu certamente não vou. Em vez de tentar fazer uma combinação perfeita com o padrão de fundo, vamos apenas sobrepô-la sobre uma cor que pelo menos combine com o fundo que pretendemos usar. Por exemplo, vamos sobrepor nossa imagem sobre um padrão de fundo 'típico' do tipo bolhas. Mas primeiro precisamos saber a cor média deste fundo. Uma maneira simples de encontrar esta cor é apenas redimensionar a imagem para um único pixel e, então, ler a cor resultante.
magick bg.gif -scale 1x1\! -depth 8 txt:-
[![\[IM Text\]](../static/img/formats/bg_color_avg.txt.gif)](../static/img/formats/bg_color_avg.txt)
Veja Formato de Texto de Enumeração de Pixel do IM para mais informações sobre o formato de saída especial "txt:" usado. Agora vamos definir a transparência de fundo da imagem usando "[-flatten](https://imagemagick.org/command-line-options/#flatten)". |
magick a.png -background '#BABBD7' -flatten a_bg.gif
| | ![[IM Output]](../static/img/formats/a_bg.gif)
Eu configurei a página web para sobrepor nossa imagem sobre aquele fundo, mesmo que aquele fundo NÃO faça parte da imagem em si. Embora a cor de fundo usada tenha combinado com a cor geral do padrão de fundo, ela ainda tem um retângulo de cor sólida muito óbvio, desprovido do padrão de fundo, ao seu redor. Uma solução prática é declarar a cor que sobrepomos como a cor "[-transparent](https://imagemagick.org/command-line-options/#transparent)" na saída GIF. Ao fazer isso, removemos a 'quadratura' da imagem. Além disso, adicionar um pequeno fator de fuzz melhora o resultado e ajusta a quantidade de espaço que a cor transparente usa, da mesma forma que o threshold fez acima. |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 5% -transparent '#B9BBD6' a_bg_trans.gif
| | ![[IM Output]](../static/img/formats/a_bg_trans.gif)
Isso normalmente é bom o suficiente para tratar a transparência na maioria das imagens GIF, embora vincule a imagem a uma cor de fundo específica. Em essência, estamos usando a transparência para definir um contorno básico para a forma da imagem, em vez de uma verdadeira transparência. Ao usar uma cor para a sobreposição e a transparência do GIF de modo que ela combine com o padrão de fundo, deixa de ficar claro exatamente onde a imagem termina e o padrão de fundo começa.
Seja cauteloso, no entanto, com a configuração "[-fuzz](https://imagemagick.org/command-line-options/#fuzz)", pois com fuzz demais você pode acabar com mais do que apenas o exterior da sua imagem se tornando transparente! |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 25% -transparent '#B9BBD6' a_bg_overfuzz.gif
| | ![[IM Output]](../static/img/formats/a_bg_overfuzz.gif)
Ele também falhará se você usou uma cor próxima da cor de fundo dentro da própria imagem. Como tal, esta técnica não é recomendada para imagens gerais, mas apenas em casos específicos. Para resolver este problema, usamos um '[-alpha floodfill](draw.html#alpha)' para definir as áreas que queremos transparentes. |
magick a.png -background '#B9BBD6' -flatten \
-fuzz 25% -draw 'fill none alpha 0,0 floodfill' a_bg_none.gif
| | ![[IM Output]](../static/img/formats/a_bg_none.gif)
Agora, desde que as bordas da nossa imagem não 'vazem', podemos usar cores semelhantes dentro da imagem como nosso fundo, e não tê-las se tornando transparentes, devido ao 'fuzz excessivo'. Claro que, se nossa imagem tiver 'buracos' nela, então esses buracos também terão que ser tratados. Nesse caso, a 'transparência com fuzz' anterior pode funcionar melhor. Eu disse que tratar uma cor de transparência do GIF é fácil! NÃO!
Uma técnica alternativa, especialmente para imagens com uma borda nítida e com anti-aliasing, é simplesmente adicionar um contorno mínimo da cor de fundo. Veja Transparência de Contorno ou Halo.
Remover a Cor de Fundo... Tentar remover uma cor de fundo específica de uma imagem GIF existente não é fácil. É especialmente difícil se a imagem sobreposta também contém a cor de fundo, pois então você não sabe realmente o que é fundo e o que não é. A melhor solução é obter uma cópia da mesma sobreposição GIF sobre duas cores de fundo diferentes e bem conhecidas. Com duas dessas imagens, você pode recuperar a sobreposição original e todos os seus pixels semitransparentes perfeitamente. Veja Remoção de Fundo usando Dois Fundos. Se você não tiver duas dessas imagens, então você não pode recuperar perfeitamente a semitransparência das imagens, mas existem técnicas que podem fazer um trabalho razoável, embora imperfeito. Para isso, veja as outras seções de Remoção de Fundo.
GIFs para fundos não específicos (ou Dithering da Transparência)
FUTURO: Isto vai ser movido para uma seção mais generalizada (não específica de GIF) de
dithering de alfa.
O maior problema com o acima é que isso só funcionaria se você por acaso soubesse exatamente qual a cor do fundo, ou o padrão de fundo sobre o qual sua imagem será usada. Se você não sabe, nem tudo está perdido. Como você viu acima, o threshold não funciona bem para uma imagem com uma área muito grande de transparência, como uma sombra difusa. Mas outra técnica conhecida como dithering pode, e NÃO exige conhecimento do fundo sobre o qual será usada. Basicamente, o dithering limita a transparência a valores ligado/desligado, criando um efeito de semitransparência sobre uma área maior usando um padrão de pixels. Em outras palavras, ele finge a semitransparência. Este método foi exemplificado no que agora é conhecido como os "Exemplos do Gambá". Infelizmente, esses exemplos não deram de fato os comandos que foram usados para gerar o exemplo. Para completar, vou tentar demonstrá-los novamente aqui. O operador "[-monochrome](https://imagemagick.org/command-line-options/#monochrome)" converte todas as cores em uma imagem em um "dither de correção de erro Floyd-Steinberg" puramente preto e branco. No entanto, como ele converte uma imagem em escala de cinza em apenas cores puramente preto e branco, precisaremos extrair uma máscara de canal alfa da imagem, aplicar dither nela e devolvê-la para a imagem. |
magick a.png \( +clone -fx a -alpha off -monochrome \) \
-compose CopyOpacity -composite a_dither.gif
![[IM Output]](../static/img/formats/a_dither.gif)
De maneira semelhante, existem alguns outros operadores de dither que podem ser limitados apenas ao canal alfa usando a configuração "[-channel](https://imagemagick.org/command-line-options/#channel)" (diferentemente de "[-monochrome](https://imagemagick.org/command-line-options/#monochrome)").
magick a.png -channel A -ordered-dither o2x2 a_ordered_2x2.gif
magick a.png -channel A -ordered-dither o3x3 a_ordered_3x3.gif
magick a.png -channel A -ordered-dither o4x4 a_ordered_4x4.gif
magick a.png -channel A -ordered-dither checks a_halftone_2.gif
magick a.png -channel A -ordered-dither h4x4a a_halftone_4.gif
magick a.png -channel A -ordered-dither h6x6a a_halftone_6.gif
magick a.png -channel A -ordered-dither h8x8a a_halftone_8.gif
magick a.png -channel A -random-threshold 5x95% a_random_5x95.gif
magick a.png -channel A -random-threshold 5x70% a_random_5x60.gif
magick a.png -channel A -random-threshold 50x95% a_random_50x95.gif
magick a.png -channel A -random-threshold 45x55% a_random_45x55.gif
magick a.png -channel A -random-threshold 50x50% a_random_50x50.gif
Como você pode ver, "[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)" produz um padrão de cores transparentes e opacas para representar a transparência geral. Isso, no entanto, produz um padrão regular muito perceptível. No entanto, se você usar uma cor de sombra que é semelhante mas mais escura do que o fundo normal, então você pode tornar este padrão quase completamente invisível. O padrão 'checks' (primeira imagem na segunda linha) é de particular interesse, pois é um padrão de 3 níveis muito simples, que é muito limpo e organizado. | _O "[-ordered-dither](https://imagemagick.org/command-line-options/#ordered-dither)" foi estendido no IM v6.2.8-6 com padrões de dither 'meio-tom'. O operador foi então completamente revisado para o IM v6.3.0 com padrões de dither nomeados (use "[-list](https://imagemagick.org/command-line-options/#list) threshold" para ver a lista completa). Você pode até gerar seu próprio padrão de dithering para gerar outros efeitos especiais. Veja Exemplos de Dithering Ordenado e as notas de Atualização do Dither Ordenado para mais detalhes.
Antes desta reformulação, os argumentos só podiam consistir nas strings de geometria '2x2', '3x3' e '4x4' (que ainda funcionarão). No entanto, qualquer outra coisa era então tratada como sendo um argumento "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)", geralmente com resultados desastrosos. É necessário cuidado ao usar esta opção em versões muito antigas do IM.
---|---
O "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)", por outro lado, produz um dither aleatorizado altamente variável que é diferente cada vez que é executado. A natureza puramente aleatória deste algoritmo de dither, no entanto, tende a produzir grandes 'aglomerados' de pixels, em vez do dithering mais suave e algoritmicamente posicionado gerado pelo operador "Floyd-Steinberg" "[-monochrome](https://imagemagick.org/command-line-options/#monochrome)". A grande vantagem do "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)", no entanto, são os controles de limite que ele fornece. Ao tornar os parâmetros muito restritivos (por exemplo, como '50x50%'), você transformaria o [-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)" em um simples operador "[-threshold](https://imagemagick.org/command-line-options/#threshold)". Sendo apenas um pouco menos restritivo, você pode aleatorizar apenas a borda exata do limite do threshold (por exemplo, usando '45x55%'). | _O argumento do "[-random-threshold](https://imagemagick.org/command-line-options/#random-threshold)" é 'PxQ', onde P é o threshold mínimo e Q é o máximo (o símbolo '%' é obrigatório). Então "5x95%" diz que qualquer coisa abaixo de 5% de MaxRGB é definida como 0, qualquer coisa acima de 95% é definida como MaxRGB, caso contrário escolhemos um valor aleatório entre 5% e 95% de MaxRGB, como o nível de threshold a usar para aquele pixel. um argumento de valor "5x95%" é provavelmente o melhor valor a usar na maioria das situações.
---|---
Você pode melhorar a aparência final usando uma cor de meio-tom mais escura (como um cinza escuro) em vez de preto para a cor da sombra. Ao fazer isso, a cor tenderá a se misturar mais com o fundo, tornando o dither menos pronunciado do que o mostrado acima. Se você de fato souber aproximadamente qual é a cor de fundo, você pode até usar uma cor mais escura daquele tom para fazer a sombra se mesclar melhor sem se restringir ao tom de fundo específico. Uma espécie de mistura um pouco dos dois métodos para melhorar o resultado geral. Basicamente, quanto mais trabalho você colocar no que você quer fazer, melhor será o resultado.
FUTURO: exemplo de dither com uma cor de dither combinando com o fundo azul claro
desta página web.
| Processamento de GIF Fora do ImageMagick giftrans | Lista todos os atributos e a tabela de cores de uma imagem GIF. Ele também pode definir um índice de cor específico como a cor transparente sem modificar a ordenação da tabela de cores das imagens, ou mesclar índices de cor que contêm a mesma cor (não é uma situação recomendada). O comando "magick identify" do IM eu descobri que faz um trabalho melhor de listar os atributos da imagem, incluindo o 'limite de repetição de loop' na "Extensão de Aplicação Mosaic" usada em animações de imagem. Veja também o script "gif2anim" (abaixo), que anteriormente usava este programa para extrair os metadados da imagem GIF necessários para recriar o GIF a partir dos 'quadros' individuais extraídos. Ele agora usa apenas "magick identify" para extrair esses metadados. |
|---|---|
| GIFsicle | Este é um programa otimizador de imagem de propósito geral, cujo propósito original era readicionar compressão a imagens GIF em uma época em que aquele algoritmo ainda estava sob direitos autorais. O programa também pode ser usado para adicionar comentários, criar animações GIF e também otimizar tais animações da mesma forma que o operador "[-deconstruct](https://imagemagick.org/command-line-options/#deconstruct)" do IM faz, embora com otimizações de transparência adicionais como Otimização de Compressão LZW. |
| InterGIF | Um programa semelhante ao GIFsicle, projetado para processar GIFs animados. No entanto, ele só fornece Otimização de Compressão de Transparência. Outros recursos, porém, podem ser úteis. Envie-me suas opiniões por e-mail. |
| gif2anim | Um script shell que pega um arquivo de animação GIF e extrai todas as imagens de quadro individuais, bem como um arquivo ".anim" contendo todas as configurações "magick do IM necessárias para reconstruir a animação a partir das imagens de quadro extraídas. |
| anim2gif | O inverso do script acima, que pega um arquivo ".anim" contendo todas as configurações "magick do IM e reconstrói uma imagem de animação GIF. Este script é muito útil para estudar, editar, ajustar e mesclar arquivos de animação GIF. Para uso básico veja Informação da Lista de Animação. Veja também Anexando Animações (sincronizadas no tempo) para um exemplo prático de seu uso. |
Tratamento de Offset de Imagem GIF
Embora o formato GIF salve imagens com offsets como parte de seu tratamento de animação de imagem, ele não salvará um offset negativo. Qualquer tentativa de salvar um offset negativo em uma imagem GIF resultará no offset sendo redefinido para zero. Isso pode ser um verdadeiro problema ao projetar animações de imagem GIF. Se o navegador web Internet Explorer recebe uma imagem GIF cujo 'offset de página' coloca a imagem em algum lugar fora do 'tamanho da tela da página', ele ignorará o tamanho e o offset da página e a exibirá como se não tivesse tal offset. O antigo navegador web Mozilla, por outro lado, apenas exibirá a tela da imagem e aplicará os offsets à imagem. Isso pode resultar em uma tela vazia sendo exibida sem dados de imagem presentes, o que, embora correto, pode ser inesperado. Ambos exibirão a imagem usando o tamanho da tela da página, com o offset de página apropriado, se a imagem estiver totalmente contida naquela tela de página.
Formatos de Saída GIF Relacionados
GIF87: Produz a saída da imagem no formato GIF 87a mais antigo.
Se o navegador web "Mozilla" vir este formato mais antigo, ele ignorará completamente a geometria de página da imagem, e não usará um quadro de 'página' maior, nem usará offsets de imagem com a imagem. A versão 6.0.4 do IM e anteriores normalmente produziriam um formato GIF89a. Mas se a imagem fosse uma animação GIF, e fosse dividida em imagens separadas usando +adjoin, o IM usaria o GIF87a, resultando em resultados inconsistentes quando exibidos em navegadores web. O IM após a v6.0.4 sempre produzirá um arquivo de formato de imagem GIF 89a, a menos que o usuário peça especificamente o formato de saída "`GIF87:`" mais antigo.
Formato de Arquivo de Imagem JPEG
Este formato é quase tão comum quanto o formato GIF acima. Mas onde o GIF é projetado tendo em mente imagens pequenas e simples do tipo "desenho animado", o JPEG é projetado para imagens grandes da vida real com muitas cores diferentes e tons de cores, como fotografias. Um recurso chave do formato de arquivo JPEG é sua compressão, que reduz o tamanho da imagem mantendo a imagem aceitável ao olho humano. Este é um processo muito complexo e além do escopo desta discussão. Para mais informações sobre este processo e seus efeitos, veja Introdução à Compressão JPEG. E uma ótima explicação detalhada no vídeo do YouTube JPEG DCT, Discrete Cosine Transform (JPEG Pt2)- Computerphile Infelizmente, para comprimir imagens bem, o algoritmo intencionalmente perde informação. O que é salvo NÃO é a mesma imagem que está na memória; a cor de um pixel ou área específica de uma imagem geralmente NÃO será exatamente a mesma cor que foi salva. Isso é particularmente verdadeiro perto das bordas dos objetos dentro da imagem. Então, como uma rápida palavra de advertência...
O IM é um processador de imagem raster geral, para modificar imagens.
Ele não fará modificações JPEG sem perdas.
Se você está interessado em tratamento sem perdas, veja Tratamento JPEG Fora do IM.
Este comportamento com perdas torna-se ainda mais perceptível se uma imagem JPEG é alterada de modo que a quantidade de mudança no limite superior ou esquerdo não é um múltiplo de 8. Quando isso acontece, os 'blocos' ou 'células' de compressão JPEG serão completamente diferentes, e isso pode produzir um grande aumento no tamanho final do arquivo salvo da imagem. Isto é, operações como chop, trim, shave, border, frame, extent, etc.. (Veja Operações de Corte e Bordadura que podem deslocar os dados da imagem por um offset de pixel que não é 8. Veja a discussão no Fórum do IM Cortar uma imagem resulta em um arquivo aumentado inesperadamente para mais detalhes.
Normalmente esta natureza com perdas dos dados JPEG não é muito perceptível. No entanto, ela pode se tornar perceptível quando você carrega e salva uma imagem JPEG múltiplas vezes ou usa uma qualidade muito baixa com um diagrama mostrando mudanças nítidas de cor. No entanto, desde que você não carregue ou reutilize imagens JPEG repetidamente (preserve e aplique operações a partir da fonte original), ele ainda é um bom formato de arquivo mesmo para tipos de imagem nos quais ele não é particularmente bom em tratar. Como exemplo desta natureza com perdas do JPEG, aqui eu gero uma imagem simples de dois gradientes anexados juntos. Embora os gradientes forneçam uma mudança de cor suave que o JPEG trata muito bem, a mudança de cor nítida entre os dois gradientes não é bem tratada.
magick -size 5x10 gradient: gradient:blue-navy +append jpg_lossy.gif
magick jpg_lossy.gif jpg_lossy.jpg
A primeira imagem é uma visão ampliada da versão em formato GIF não distorcida da imagem (clique na imagem para ver ou baixar a visão não ampliada). Ela contém apenas 20 cores, então neste caso o formato GIF pode tratar a imagem perfeitamente e de fato gerar um tamanho de arquivo muito pequeno (veja a tabela abaixo). Por outro lado, a versão JPEG da imagem mostra distorções de cor claras que a compressão JPEG adicionou à imagem salva, para permitir comprimi-la melhor. As distorções são maiores no canal de cor azul, o que não é surpreendente, pois o azul não é bem resolvido pelo olho humano. Isto é, o olho humano tende a 'espalhar' as cores azuis naturalmente, então o algoritmo JPEG tira proveito disso (usando internamente um espaço de cor YCbCr). De fato, sem a ampliação usada acima, você teria dificuldade para ver o efeito. Vamos dar uma olhada no efeito da qualidade sobre a imagem.
magick jpg_lossy.gif -quality 100% jpg_lossy_100.jpg
magick jpg_lossy.gif -quality 80% jpg_lossy_80.jpg
magick jpg_lossy.gif -quality 50% jpg_lossy_50.jpg
magick jpg_lossy.gif -quality 20% jpg_lossy_20.jpg
magick jpg_lossy.gif -quality 5% jpg_lossy_5.jpg
Se você olhar de perto o resultado da primeira imagem acima, na qual salvamos a imagem de teste em '100%' ou qualidade máxima, ainda há alguma leve distorção de cor. É muito difícil de ver, mas está presente. Por outro lado, usar uma configuração "[-quality](https://imagemagick.org/command-line-options/#quality)" progressivamente mais baixa para a imagem JPEG torna esta distorção de cor ainda maior e mais perceptível. Não só isso, ela cria uma espécie de 'sombreamento' das bordas, produzindo 'ondas' de mudanças de cor se espalhando a partir das bordas nítidas. Um efeito comumente conhecido como Artefatos de Ringing. No entanto, a razão para usar a compressão é que o tamanho da imagem resultante é dramaticamente menor, pelo menos inicialmente. Aqui está uma lista de arquivos dos resultados e seu tamanho em bytes.
Note que a imagem GIF neste caso é muito pequena, pois grandes 'blocos' de cor comprimem extremamente bem no GIF. À medida que a qualidade do JPEG fica mais baixa, o tamanho da imagem também fica menor. A configuração de qualidade padrão, quando nenhuma qualidade JPEG é definida, seja pelo usuário ou pelo arquivo de formato da imagem de origem, é cerca de 92%, que é uma qualidade muito alta. No entanto, usando uma configuração de qualidade menor que '50%', os tamanhos das imagens não ficam muito menores em termos de economia de tamanho de arquivo, apenas uma imagem progressivamente muito mais degradada. É um processo de retornos decrescentes. Em resumo...
O JPEG perde informação, degradando imagens quando salvas.
Use algum outro formato para imagens intermediárias durante o processamento.
Use o formato JPEG apenas para a imagem final, não para processamento adicional.
O JPEG também não é bom para imagens artificiais com mudanças nítidas de cor, como desenhos de linha, diagramas, ou ícones, texto e símbolos do tipo desenho animado. Tais imagens com um baixo número de cores são melhor salvas usando um formato de imagem de paleta, como GIF, ou PNG8. Um novo formato de imagem JPEG, o Jpeg2000, está se tornando disponível e permite a compressão JPEG sem perdas. No entanto, isso requer que a biblioteca 'JasPer' também esteja instalada. Para usar este formato especial, você também precisa usar uma opção "-compress jpeg2000" ou salvar em um formato de arquivo JP2, para que o IM chame a biblioteca certa.
Transparência JPEG - NÃO
Além da compressão, o outro grande problema que os usuários de JPEG enfrentam é que
O JPEG não salva transparência
Assim, embora você possa sobrepor imagens sobre uma cor ou padrão de fundo e salvar para JPEG, você não pode dar a uma imagem JPEG uma borda de forma livre ou com buracos transparentes. Como o JPEG foi projetado para salvar imagens do mundo real, e não partes de imagens, a transparência não era uma questão com a qual ele se preocupava quando o formato foi criado. Consequentemente, os projetistas nunca se preocuparam em incluir um canal alfa, ou outra informação de transparência no formato de arquivo. Por exemplo, vamos pegar o PNG com transparência que usamos acima e fazer magick dele diretamente para JPEG.
magick a.png a.jpg
Como você pode ver, todas as partes transparentes simplesmente se tornaram pretas. Mas dependendo da fonte da imagem (especialmente imagens GIF), as áreas transparentes poderiam ter se tornado, com a mesma facilidade, alguma outra cor aleatória ou inapropriada. Se isso puder ser um problema, a melhor ideia é fazer o IM Remover a Transparência Alfa, antes de salvar a imagem no formato de arquivo de imagem JPEG.
Distorção de Cor do JPEG (testando)
Como mencionado acima, o algoritmo de compressão que o JPEG usa é com perdas. Aquela imagem será modificada para permitir que ela comprima melhor, reduzindo o espaço de arquivo, esperançosamente. Exatamente quanta distorção de cor ocorre depende das configurações de qualidade usadas. Por exemplo, vamos ver quantas cores há na imagem "netscape:" embutida do IM... | |
magick identify -format "Colors: %k" netscape:
| ![[IM Text]](../static/img/formats/jpg_colors_none.txt.gif)
Como você pode ver, esta imagem por padrão tem 216 cores em um grande arranjo retangular. Este tipo de imagem NÃO é uma imagem muito boa para salvar no formato JPEG, o que a torna ideal para nossos propósitos. Então vamos ver o número de cores que uma gravação de imagem JPEG desta imagem produz... | |
magick netscape: JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_def.txt.gif)
Isto é, por padrão, o arquivo JPEG salvo tem quase 9 vezes mais cores! Embora o resultado ainda se pareça com a imagem original, as bordas da área retangular terão tido cores adicionadas nas proximidades. Salvar na configuração de qualidade mais alta não salvará a imagem sem qualquer distorção de cor... | |
magick netscape: -quality 100 JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_100.txt.gif)
Como você pode ver, uma configuração de qualidade muito alta só adicionará algumas cores extras, mas a imagem ainda terá uma leve (mínima) distorção de cor. Você também pode ver que o tamanho do arquivo é maior, pois muito pouca compressão pode ser alcançada. Agora vamos tentar "Sem Perdas"... | |
magick netscape: -quality 100 -compress Lossless JPG:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jpg_colors_lless.txt.gif)
Ainda há uma distorção de cor! Obviamente minha biblioteca JPEG NÃO está corrigida para codificação sem perdas. No entanto, lembre-se de que apenas outra biblioteca corrigida pode ler tal imagem JPG sem perdas. Alternativamente, eu recomendo compilar seu IM para usar a biblioteca JasPer e o formato de arquivo de imagem JP2 mais novo. | |
magick netscape: JP2:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jp2_colors_lless.txt.gif)
Como você pode ver, o formato Jpeg2000 mudou para outros métodos de compressão de imagem não-com-perdas, mas não distorce a cor da imagem, por padrão. Ele também realiza alguns métodos de compressão muito altos na imagem. No entanto, usar uma qualidade mais baixa com o novo formato JP2 introduzirá novamente as distorções de cor, de modo a gerar uma imagem menor, assim como o formato de arquivo de imagem JPEG normal... | |
magick netscape: -quality 50% JP2:- |\
magick identify -format "Colors: %k\nFile Size: %b" -
| ![[IM Text]](../static/img/formats/jp2_colors_50.txt.gif)
Para mais informações sobre o uso do codificador JPEG2000, veja documentação dos parâmetros de codificação JPEG2000.
Opções de Controle de Leitura do JPEG
-define jpeg:size={width}x{height} Esta configuração é uma dica para a biblioteca de imagem JPEG ler apenas o suficiente do arquivo de imagem (JPEG) de entrada para criar uma imagem que seja pelo menos do tamanho dado (largura × altura) ou maior. Se a imagem de entrada for enorme, isso pode reduzir muito a quantidade de memória que o IM precisa para a leitura da imagem, já que o IM estará então tratando uma imagem menor. Isso, por sua vez, pode aumentar dramaticamente a velocidade da operação completa. Lembre-se de que isto é apenas uma dica quanto ao tamanho da imagem desejada; não há garantia de que você obterá este tamanho, apenas algo próximo a mas maior que aquele tamanho. Tipicamente você obterá algo que está entre este tamanho e o dobro desse tamanho, preservando a proporção de aspecto das imagens. Geralmente, após ler uma imagem JPEG com uma dica de tamanho, a imagem é então imediatamente redimensionada para seu tamanho 'exato' final. Tipicamente usando "
[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)" para remover quaisquer perfis de imagem, também. Por exemplo...magick -define jpeg:size=64x64 jpeg_large.jpg jpeg_size_hint.jpg magick -define jpeg:size=128x128 jpeg_large.jpg \ -thumbnail 64x64 jpeg_thumbnail.jpg
| _Antes do IM v6.5.6-0, esta configuração de codificador era extraída da configuração "
[-size](https://imagemagick.org/command-line-options/#size)". Isso causava problemas quando os usuários usavam "[-size](https://imagemagick.org/command-line-options/#size)" para criação de imagem mas então tinham a leitura JPEG produzindo resultados inesperados. Como tal, isso foi alterado para ser uma configuração de codificador especial em vez disso.Em versões mais antigas você pode precisar redefinir a configuração "
[-size](https://imagemagick.org/command-line-options/#size)" usando "[+size](https://imagemagick.org/command-line-options/#size)antes de ler imagens JPEG, ou o IM pode não ler uma imagem JPEG por completo.
---|---
Note que este modificador faz com que a biblioteca JPEG pule a leitura de colunas e linhas inteiras de pixels. Como tal, ele produzirá efeitos muito parecidos com o Operador de Redimensionamento por Amostragem, incluindo seus fortes Artefatos de Aliasing. Por causa disso, é recomendado que você especifique pelo menos o dobro do 'redimensionamento' final da imagem, para evitar este problema, exatamente como mostrado no exemplo acima. | _Note que oOperador de Redimensionamento Thumbnail também usa a mesma técnica de amostragem para operações de redimensionamento em escala extremamente grande, para reduzir rapidamente o tamanho da imagem antes de usar uma operação de redimensionamento normal, embora para 5 vezes em vez do dobro do tamanho final da imagem. A diferença no tamanho é uma questão de qualidade final da imagem.
---|---
+profile '*' -strip Imagens JPEG conforme salvas por câmeras digitais, software de digitalização e outros softwares de processamento de imagem como o "photoshop" frequentemente adicionarão grandes perfis de "comentários de programa " às imagens JPEG. Qualquer uma dessas opções removerá esses perfis de uma imagem, após aquela imagem ser lida. O operador "[+profile](https://imagemagick.org/command-line-options/#profile)" removerá todos os perfis de cor de uma imagem, enquanto "[-strip](https://imagemagick.org/command-line-options/#strip)" removerá todos os perfis e metadados que a imagem possa ter. Note também que "[-thumbnail](https://imagemagick.org/command-line-options/#thumbnail)" é uma opção "[-resize](https://imagemagick.org/command-line-options/#resize)" que também fará um "[-strip](https://imagemagick.org/command-line-options/#strip)" ao mesmo tempo. Veja também Criando Miniaturas. -type TrueColorMatte Como o JPEG não salva nenhuma forma de transparência, quando ele é lido ele será sempre totalmente opaco, e não terá canal 'alfa' na memória. Esta configuração forçará qualquer imagem JPEG lida após a opção a ter um canal 'alfa' totalmente opaco adicionado à imagem na memória. A melhor maneira de fazer isso, no entanto, é usar um "[-alpha set](https://imagemagick.org/command-line-options/#alpha)" ou "[-alpha](https://imagemagick.org/command-line-options/#alpha) set", após ler a imagem, pois isso terá menos impacto na leitura e escrita de outros formatos de imagem. Veja Tipo de Imagem ao Ler e Escrever e Definir Alfa para mais informações.
Opções de Controle de Escrita JPEG
Por padrão, o "[-quality](https://imagemagick.org/command-line-options/#quality)" e o "[-sampling-factor](https://imagemagick.org/command-line-options/#sampling-factor)" que foram encontrados ao ler a imagem JPEG são usados ao escrever de volta para uma imagem JPEG. Isso, no entanto, pode não produzir o mesmo tamanho de arquivo no disco, e você ainda terá sempre uma perda adicional de qualidade de imagem devido à leitura e ressalvamento de uma imagem JPEG. As tabelas de quantização JPEG, porém, não são preservadas.
-quality {percent} Provavelmente a opção mais importante ao salvar imagens JPEG, pois ela controla justamente o quanto a imagem é comprimida ao salvá-la no disco. O valor não é uma porcentagem de tamanho, apenas um valor de qualidade. Quanto menor o valor, menor a imagem e mais informação da imagem é perdida, produzindo mais artefatos e degradando a imagem.
FUTURE: VERY low quality example of a photoNOTA: uma configuração de qualidade de '
100%' não garante salvar uma imagem sem qualquer perda de qualidade, apenas uma quantidade mínima de perda. (Veja a próxima opção) NOTA: Você não pode determinar uma qualidade para obter um tamanho de arquivo específico, exceto por tentativa e erro. Comece com um "[-quality](https://imagemagick.org/command-line-options/#quality)" de 75% e verifique o tamanho de arquivo resultante. Se for muito grande, reduza a qualidade em 10%; se muito pequeno, aumente. Depois de ter um limite inferior e superior de qualidade, faça uma busca binária para encontrar uma qualidade que melhor corresponda ao tamanho de arquivo desejado. Um total de cinco ou seis tentativas deve ser suficiente. -define jpeg:extent={size} A partir do IM v6.5.8-2 você pode especificar um tamanho máximo de arquivo de saída para a imagem JPEG. O tamanho é especificado com um sufixo. Por exemplo "400kb". Funciona gerando muitas versões da imagem JPEG, fazendo uma busca binária da configuração de qualidade de saída "[-quality](https://imagemagick.org/command-line-options/#quality)", até que chegue o mais próximo possível do tamanho de arquivo dado sem excedê-lo. Faz isso escrevendo a imagem repetidamente em um arquivo temporário e, uma vez que tenha o tamanho de qualidade apropriado, então gera a imagem final no nome de arquivo de saída dado, uma única vez. A saída, portanto, ainda funcionará bem ao gerar a imagem final para um pipeline, ou diretamente para a rede, e não apenas para um arquivo real. No entanto, não espere que este processo seja muito rápido devido aos requisitos de E/S. Talvez 4 a 8 vezes mais lento. Mande-me seus resultados se você realmente fizer uma comparação de tempo. -compress LossLess Embora uma configuração de "[-quality](https://imagemagick.org/command-line-options/#quality)" de '100%' ainda possa produzir cores ligeiramente diferentes (ainda é 'lossy'), a opção "-compress LossLess" pedirá à biblioteca JPEG para salvar a imagem sem qualquer perda de dados. Assim, ao reler a imagem ela deverá ser restaurada exatamente como foi salva. AVISO: Isso só funcionará se a sua biblioteca JPEG tiver sido corrigida (patched) para codificação 'LossLess JPEG', mas o uso do formato de arquivo JP2 substituiu isso, de modo que esta opção raramente tem qualquer efeito real atualmente. Além disso, você DEVE também definir "-quality 100%" para que isso funcione. Embora intuitivamente você pensasse que salvar com 'LossLess' significaria automaticamente usar uma qualidade de 100%, este não é o caso. Isso é o resultado de aplicar um patch incomum à escrita de imagem JPEG, que é um formato lossy por definição. É claro que o arquivo gerado provavelmente será muito maior do que uma imagem JPEG normal. Além disso, você acabará com um JPEG comprimido sem perdas que não conseguirá ler em lugar nenhum, exceto com uma biblioteca JPEG igualmente 'patched'. Por isso, o 'lossless JPEG' NÃO é recomendado e algum outro formato (como PNG ou JP2) deve ser usado em vez dele. -interlace Line Use um estilo 'Progressive JPEG' que permite ver imagens jpeg grandes enquanto elas ainda estão sendo carregadas. Veja também a solução não-IM para recodificar um JPEG existente sem perda adicional, abaixo. -sampling-factor {horizontal}x{vertical} Ajusta o fator de amostragem usado pela biblioteca JPEG para a subamostragem de croma. Isso pode ser definido como '2x1' para criar arquivos de animação MPEG-2. "2x2, 1x1, 1x1" é o método padrão de subamostragem do IM e corresponde a 4:2:0, veja Wikipedia, Chroma Sub-Sampling. No entanto, quando a "quality" é 90 ou superior, os canais não são subamostrados. Basicamente, isso definirá se o tamanho do 'block' ou 'cell' de processamento é de 8 pixels ou 16 pixels. -density {Xdpi}x{Ydpi} Embora a densidade não tenha efeito sobre o tamanho em pixels de saída da imagem resultante. A configuração acima, no entanto, é armazenada no cabeçalho JFIF do formato de arquivo de imagem JPEG. Infelizmente, alguns programas como o Photoshop ignorarão essa configuração se uma densidade também estiver presente em um perfil específico do Photoshop ('8BIM') armazenado na imagem. A densidade só é realmente importante quando um dispositivo de saída está sendo usado, como impressoras ou monitores, permitindo que esses dispositivos exibam a imagem em escala para tamanhos do mundo real. Por exemplo, garantindo que a foto ou página que você digitalizou seja impressa no tamanho certo. Para mais informações sobre densidade veja também Image Density Meta-data e Resample Resizing. -type TrueColor O IM usará automaticamente um formato interno em tons de cinza para imagens que contêm apenas valores em tons de cinza. Esta configuração substituirá esse comportamento e forçará o IM a sempre produzir uma imagem JPEG colorida em vez de tons de cinza. Veja Image Type when Reading and Writing para mais informações. -define jpeg:optimize-coding=false Desativa o cálculo de tabelas de codificação Huffman ótimas para esta imagem. Isso está ativado por padrão. Requer uma passagem extra sobre a imagem, para fazer os cálculos necessários, mas isso é mínimo. -define jpeg:q-table={path} Define um arquivo contendo tabelas de quantização JPEG personalizadas, em XML. Uma tabela de exemplo normalmente é instalada em "/etc/ImageMagick/quantization-table.xml", mas é embutida no ImageMagick e, portanto, normalmente não é usada. Uma série de discussões sobre a geração de tabelas pode ser encontrada no Digital Image Processing Forum, com discussões específicas (no momento da escrita) em JPEG Quantization Tables, Better JPEG quantization tables?, Stupid PET Trick qtable of one, JPEG luma quantization table. Esta opção foi adicionada ao IM v6.5.7-8.
Qualidade JPEG vs Tamanho do Arquivo
O tamanho final de um arquivo JPEG para uma dada qualidade é indeterminado. Todo o processo de compressão é tão complexo que pequenas mudanças produzem mudanças extremamente diferentes na compressão. É um 'efeito borboleta'. Mesmo a mesma imagem de origem com a mesma qualidade, mas com versões diferentes do IM, da biblioteca JPEG, ou de outros programas de processamento de imagem, você obterá diferenças muito grandes no tamanho do arquivo e na qualidade observada. É melhor tratar a configuração de qualidade como um simples 'palpite' sobre quanta compressão ou qualidade visual deve ser aplicada a uma imagem específica. Em essência, é uma impossibilidade prática predeterminar o tamanho final do arquivo para uma dada imagem e configuração de qualidade... Exceto realmente fazendo isso. O IM, no entanto, pode fazer 'execuções de teste' para descobrir a melhor qualidade a usar para um tamanho de arquivo específico usando o define especial 'jpeg:extent'. Veja JPEG Write Controls acima. É extremamente lento, mas mais rápido do que uma solução faça-você-mesmo semelhante. Fazer isso não é recomendado, e não apenas porque é lento. Pelo seu método de tamanho de arquivo fixo, uma imagem simples poderia sair com qualidade 90%, mas conter 50k de dados desnecessários, enquanto uma imagem complicada teria que cair para qualidade 30% e exibir artefatos JPEG (ou, em termos menos técnicos, ficaria horrível) devido à escassez de dados para o detalhe presente. A melhor ideia é encontrar uma única configuração de qualidade que produza um tamanho médio de arquivo de 100KB para uma seleção razoável das suas imagens. Mesmo assim, imagens sem muito detalhe podem sair com apenas 50k. Enquanto imagens com muitos detalhes intrincados podem sair com 150k, ambas ficarão aceitáveis. Para um guia prático sobre a compressão e qualidade JPEG, veja Optimization of JPEG compression settings. Veja também JPEG Compression, Quality and File Size para uma análise dos detalhes internos do JPEG. Dica do Photoshop : O Photoshop adicionará cerca de 4 Kbytes de informação extra às imagens JPEG para guardar pré-visualizações e informações de gerenciamento de cores (perfil '8BIM'). Se você não quiser essa informação, use a função 'Save for Web'. Esta dica foi encontrada em um artigo sobre compressão JPEG por Gernot Hoffmann.
Formatos de Saída JPEG Relacionados
- PJEG: Escreve uma imagem JPEG de carregamento progressivo (Progressive load).
- Isso não é usado com frequência nestes dias de downloads rápidos de rede, mas era muito comum quando os modems dial-up eram a norma. Basicamente, escreve a cada N linhas primeiro, depois uma linha entre elas, e assim por diante, para que você possa ver uma imagem mesmo após baixar apenas uma pequena porcentagem da imagem completa.
- JPEG2000: O mais recente formato JPEG com novos acréscimos.
- Este formato requer que a biblioteca 'JasPer jp2' esteja instalada ou você obterá um erro..
"no encode delegate for this image format"
Este formato usa compressão wavelet para comprimir imagens em vez do método JPEG DCT padrão. Isso lhe dá taxas de compressão muito melhores para a mesma qualidade de imagem. Assim, reduzindo ainda mais o espaço em disco. Infelizmente, ele ainda não foi amplamente adotado, então você não pode usá-lo para fins externos, pelo menos até que navegadores web e outros visualizadores e editores de imagem também comecem a fazer uso do formato. Quaisquer imagens salvas com este formato só podem ser lidas por usuários com esta biblioteca, e provavelmente levará muito tempo até que uma boa porcentagem de usuários use esta biblioteca. Particularmente os usuários do Windows, pois a Microsoft provavelmente não a incluirá a menos que pessoas suficientes a exijam. Dica do Quicktime : O Quicktime usa o formato jp2, mas ele deve ser gerado em "[-depth](https://imagemagick.org/command-line-options/#depth) 8".
Processamento JPEG Não-ImageMagick (Um resumo rápido)
| jpegtran | Ferramenta padrão que é instalada com a biblioteca JPEG. Isso permite aplicar várias transformações a imagens em formato JPEG sem decodificar e recodificar os dados da imagem, evitando assim que os dados JPEG se degradem. (veja abaixo) |
|---|---|
| jpegtrans | Uma versão mais nova do programa "jpegtran" anterior, embora muitos dos recursos adicionados (como o corte sem perdas) tenham agora sido embutidos na versão de biblioteca distribuída (acima). |
| jhead | Um manipulador JPEG sem perdas mais amigável ao usuário, especialmente no que diz respeito ao perfil EXIF de câmera digital. Isso inclui o tratamento de comentários, ajustes de data, extração de miniaturas, exclusão ou substituição, remoção de perfis, etc. Ele também tenta garantir que outros perfis não sejam destruídos, o que é algo que o "jpegtran" tende a fazer. Há também outros programas similares como o "[ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/)" e o "[Exifer](http://www.exifer.friedemann.info/)". Muitos programas de álbum de fotos web a partir de JPEG também fazem isso. |
| _A rotação JPEG sem perdas (que todos os programas acima fornecem) só funcionará corretamente para imagens que tenham um tamanho divisível por 8 ou 16. Isso é verdade para a maioria (mas não todas) das fotos de câmeras digitais. Se você tentar isso com uma imagem de tamanho ímpar, os blocos da borda direita ou inferior (contendo o tamanho parcial) não serão posicionados corretamente na imagem final, pois esses blocos só podem existir na borda direita ou inferior. |
Para um exemplo disso, veja esta discussão específica_
---|---
Como você pode ver, a maioria desses programas é projetada para processar os metadados da imagem JPEG sem reprocessar a imagem comprimida JPEG. (veja a seguir)
Processamento JPEG Sem Perdas
Como a decodificação e recodificação de uma imagem JPEG resulta em uma degradação da qualidade da imagem (a menos que se use compressão sem perdas), a biblioteca de imagem JPEG fornece uma série de programas especiais que podem manipular a imagem sem perda de qualidade. Esses comandos também serão geralmente muito mais rápidos do que os equivalentes do IM, pois não precisam fazer tanto processamento da imagem. Ao modificar comentários em imagens JPEG, você pode usar os programas de mais baixo nível da biblioteca JPEG "rdjpgcom", "wrjpgcom" e "jpegtran". No entanto, eu recomendo que você use o programa "[jhead](http://www.sentex.net/~mwandel/jhead/)", pois ele preserva qualquer perfil ou outra informação que também esteja presente na imagem. O "jpegtran" permite ir além e realmente manipular dados de imagem sem perdas, incluindo rotação de 90 graus, corte e drop-in. Ele até permite a criação de imagens JPEG de qualidade mista. Para uma demonstração disso, veja a página JPEGhack por Nemo Thorx. (Veja as notas abaixo) No entanto, esses comandos NÃO são recomendados para uso geral, pois estão limitados aos limites de bloco (8 ou 16 bits) da imagem JPEG. Ou seja, você só pode cortar, rotacionar ou fazer drop-in no nível de célula de compressão JPEG, não no nível de pixel real.Comentários... Se você está criando Montage Thumbnail Web Index Pages das suas fotos JPEG e gosta de usar os comentários que você adiciona aos arquivos JPEG, usando os programas acima, use um "-label '%c'" para dizer ao montage para usar o campo 'comment', antes de ler o nome do arquivo na linha de comando do "magick montage". Você também pode usar esse comentário em uma Complex Polaroid Transformation, ou em uma Polaroid Montage ou em algum tipo de Annotation de imagem. O programa "[jhead](http://www.sentex.net/~mwandel/jhead/)" pode ser usado para adicionar ou modificar comentários em arquivos de imagem JPEG. No entanto, descobri que usar a opção "edit comments" ("-ce") não é uma boa maneira de fazer isso, pois ela adiciona uma nova linha extra ao final do comentário. Essa nova linha extra atrapalha o uso de comandos (formatação de escape de label '%c') no IM. A melhor maneira é usar "comment input" ("-ci") para alimentar um comentário (sem novas linhas no final), ou as opções "comment literal" ("-cl") como uma maneira muito melhor...
jhead -cl 'Photo of some stuff, by Joe Citizen' image_of_stuff.jpg
Miniaturas... Brian Jackson brian@brianjacksonphoto.com também relata que a maioria das câmeras digitais (como a dele, que é uma Cannon 1D) embute uma miniatura de tamanho entre 12kb-25kb (160x120 pixels), na imagem JPEG que produzem. O IM pode extrair essas miniaturas usando...
magick image.jpg thumbnail:thumb.jpg
No entanto, o programa "[jhead](http://www.sentex.net/~mwandel/jhead/)" também pode extrair essas miniaturas...
mkdir thumbs
jhead -st "thumbs/&i" *jpg
Isso é super rápido comparado ao IM, pois não edita a imagem, apenas transfere dados existentes. No entanto, a qualidade da miniatura não é nem de longe tão boa quanto as miniaturas que o IM pode gerar a partir da imagem real, e elas também podem não estar rotacionadas corretamente, e definitivamente não terão o tamanho que você deseja. Usando o ExifTool... Do Rob: Se você quiser uma edição mais detalhada dos perfis armazenados em arquivos de imagem JPEG do que o que o "[jhead](http://www.sentex.net/~mwandel/jhead/)" fornece, dê uma olhada em aplicações mais centradas em EXIF, baseadas em perl, o "[ExifTool](http://www.sno.phy.queensu.ca/~phil/exiftool/)", uma versão compilada alternativa "[ExifTool](http://www.dalibor.cz/minolta/exiftool.htm)" e uma GUI para Windows "[Exifer](http://www.exifer.friedemann.info/)", apenas para citar alguns. Com o módulo Perl Image::ExifTool instalado, isso removerá todos os metadados JPEG sem perdas. Achei o seguinte equivalente ao método de linha de comando para remover dados EXIF. Caso alguém esteja interessado no futuro:
use Image::ExifTool;
$exifTool = new Image::ExifTool;
$exifTool->SetNewValue('*'); # delete all...
$exifTool->WriteInfo('original_image.jpg','modified_image.jpg');
$errorMessage = $exifTool->GetValue('Error');
print $errorMessage; # (if has value an error occurred)
Deu algum trabalho descobrir, porque acontece que você precisava primeiro atribuir a configuração usando SetNewValue, depois carregar e salvar simultaneamente usando WriteInfo. Imagens JPEG de Qualidade Mista, usando JpegTrans... Wolfgang Hugemann {Auto@Hugemann.de} queria que as bordas de uma imagem JPEG não fossem comprimidas de forma alguma, pois isso atrapalha o tratamento de fotos. Veja este site. A solução fornecida por Yuval Levy jpegtran" para inserir um JPG de baixa qualidade dentro de um JPEG de alta qualidade...
A solução: * produza duas versões da mesma imagem com o ImageMagick, uma com alta qualidade 100 e a outra com baixa qualidade 60 (para redução de tamanho). * use jpegtran para cortar a q60, removendo 8 pixels de cada lado * use jpegtran para mesclar a q60 sobre a q100 * use jpegtran para mesclar em uma faixa (stripe)
Nemo Thorx jpeghack@nemo.house.cx leu o texto acima e tentou implementar a qualidade JPEG Mista. Ele teve sucesso e demonstra os resultados em suas páginas Wiki em JPEGhack. Basicamente, é muito possível fazer processamento JPEG sem perdas, como 'cortar' e 'soltar' (dropping) novas seções de blocos JPEG em uma imagem existente.
Formato de Arquivo de Imagem PNG
Este é um dos mais novos e modernos formatos de imagem, suportando cores de 32 bits incluindo transparência por canal alfa, mas também pode ser otimizado para um esquema de cores indexadas de 8 bits semelhante ao GIF (limite de 256 cores). Por isso, é um excelente formato intermediário para processamento de imagem sem perda de informação da imagem.
Compressão PNG
Quando usada com saída PNG, a qualidade é considerada como dois números decimais. O primeiro dígito (dezenas) é o nível de compressão zlib, 1-9. No entanto, se uma configuração de '0' for usada, você obterá compressão Huffman em vez de compressão 'zlib', que muitas vezes é melhor! Estranho, mas verdadeiro! O segundo dígito é o tipo de filtragem de codificação de dados PNG (antes de ser comprimido): 0 é nenhum, 1 é "sub", 2 é "up", 3 é "average", 4 é "Paeth" e 5 é "adaptive". Então, para imagens com sequências sólidas de cor, um filtro "none" (-quality 00) é tipicamente melhor. Para imagens de paisagens naturais, uma filtragem "adaptive" (-quality 05) geralmente é melhor. | _O codificador PNG vem passando por muito trabalho, e métodos melhores de controlar as configurações exatas de codificação e compressão são tipicamente definidos usando oDefine Operator.
Veja Writing PNG Image Controls abaixo para mais detalhes sobre os defines, ou olhe os comentários no arquivo do codificador PNG, código-fonte "coder/png.c.
_
---|---
Se você tem uma imagem ImageMagick com transparência binária (liga/desliga), o codificador PNG a escreverá de forma eficiente, usando o chunk tRNS em vez de um canal alfa completo. Mas se qualquer valor de opacidade diferente de 0 ou MaxRGB estiver presente, ele escreverá um PNG com um canal alfa. Você pode forçar esse comportamento usando a configuração de leitura de imagem "-type TruecolorMatte", ou pode salvar a imagem usando o arquivo de formato "PNG32:". Um programa externo "[pngcrush](http://pmt.sourceforge.net/pngcrush/)" ou a versão mais nova "[OptiPNG](http://optipng.sourceforge.net/)" tentará recomprimir um PNG específico para a melhor compressão possível disponível, e é recomendado para imagens que você planeja colocar em um site. Outro programa "[pngnq](http://www.cybertherial.com/pngnq/pngnq.html)" fará a quantização de cores para um PNG de 256 cores, 8 bits, embora não se saiba se ele suporta cores semitransparentes nesse formato.
Melhor Compressão PNG
Um ponto sobre imagens PNG é que a imagem PNG preservará a cor dos pixels totalmente transparentes. Ou seja, mesmo que você não possa vê-la, a transparência tem cor, e o PNG preserva esses dados. Isso significa que, em muitos casos, o PNG pode ser feito para comprimir melhor substituindo aquela 'cor invisível' por uma cor sólida estática, em vez de uma cor de lixo que possa ter sobrado de processamento de imagem anterior. Existem dois métodos principais que você pode usar para isso: usar o Alpha Background Operator para tratar apenas os pixels totalmente transparentes, ou usar uma operação do tipo Fuzz Factor with Transparency para também mapear cores quase-semitransparentes para totalmente-transparente-preto. Por exemplo, aqui eu pego a imagem "a.png" com sombra difusa que geramos acima e substituo todos os pixels que estão dentro de 20% da transparência total.
magick a.png -fuzz 10% -transparent none a_compress.png
Como você pode ver, você obtém uma melhoria substancial no tamanho da imagem (cerca de 50%). Mas com um corte abrupto para a sombra da imagem. Outra alternativa é simplesmente tornar o efeito de sombra menor, ajustando os Levels do canal de transparência.
magick a.png -channel A -level 20,100%,0.85 +channel \
-background black -alpha background a_compress2.png
Você também pode melhorar os resultados do algoritmo de compressão e, assim, o tamanho final da sua imagem PNG usando um número menor de cores.
magick image.jpg -thumbnail 200x90 -colors 256 \
-quality 90 -depth 8 thumbnail.png
Isso, no entanto, só é recomendado para pequenas imagens de miniatura que não envolvam transparência, e apenas como passo final, pois é uma técnica muito 'lossy'.
PNG, Navegadores Web e Transparência
O Microsoft Internet Explorer (IE versão 6 e anteriores) não exibe corretamente PNG quando qualquer tipo de transparência está envolvido. Agora, embora este seja o navegador mais conhecido a não suportar totalmente PNG, ele não é o único. As páginas PNG transparency test e Another PNG test permitirão que você teste seu navegador. Elas também listam os navegadores e versões que produzem os resultados exibidos. No entanto, como o IE (pelo menos no momento da escrita) é provavelmente o navegador mais comum, você pode adicionar à sua página web uma série de soluções alternativas para o problema. Para informações sobre isso, veja a minha WWW Laboratory Page PNG with Transparency and IE, onde eu testo e demonstro a solução "PNG in IE" que estou usando. Outras soluções são converter o PNG para os formatos JPEG (com a cor de fundo correta) ou GIF. Esses métodos são discutidos detalhadamente em GIF Images on Backgrounds. Outra solução é definir a cor de todas as cores totalmente transparentes em uma imagem antes de salvá-la como PNG. O PNG salvará essa cor totalmente transparente, mas esteja avisado de que praticamente qualquer outra operação do IM redefinirá o totalmente transparente de volta para preto totalmente transparente (já que a cor transparente não deveria importar, pois é assim que a matemática de imagem funciona). Por exemplo, a imagem de teste dos exemplos do IM padrão usa preto totalmente transparente para qualquer pixel que seja totalmente transparente. Podemos verificar isso desativando o canal alfa, ou salvando como JPEG... |
magick test.png test.jpg
![[IM Text]](../static/img/formats/test.jpg)
Agora vamos salvar isto de forma que todas as cores totalmente transparentes sejam substituídas por uma cor 'silver' totalmente transparente (veja o operador Alpha Background)... |
magick test.png -background silver -alpha Background test_silver.png
![[IM Text]](../static/img/formats/test_silver.png)
Note que a imagem ainda deve parecer correta se a transparência (ou o JAVA script especial na página) estiver funcionando no seu navegador. Mas se desativarmos o canal alfa (salvando como JPEG, que não permite alfa), podemos ver que a imagem PNG realmente usa uma cor 'silver' para os pixels totalmente transparentes. |
magick test_silver.png test_silver.jpg
![[IM Text]](../static/img/formats/test_silver.jpg)
Note, porém, que isso NÃO modifica os pixels semitransparentes, e estes ainda terão suas cores normais (não transparentes) sem misturar essa cor com o fundo da página, ou com a cor usada para a transparência total. Como a semitransparência não está mais envolvida, as bordas podem parecer serrilhadas (aliased), bem como efeitos de 'halo', ao longo das bordas de cor mais clara. Por exemplo, olhe as bordas dos círculos preto e branco que mostram os efeitos de aliasing dos 'serrilhados'. No entanto, usar uma cor de substituição cinza deve tornar isso não tão ruim quanto a cor 'black' original usada para a transparência total. A outra vantagem de definir a cor dos pixels totalmente transparentes é uma melhoria na compressão dos dados. Às vezes, as cores subjacentes nas áreas transparentes usadas durante o processamento eram preservadas. Estas, por sua vez, não comprimem tão bem quanto uma cor sólida. Por isso, definir a cor totalmente transparente como fizemos acima pode produzir uma boa economia no tamanho final do arquivo. No entanto, isso deve ser feito como passo final, pois muitas operações de processamento de imagem do IM substituirão qualquer cor totalmente transparente presente em uma imagem de volta para preto totalmente transparente. Veja o operador Alpha Background para uma lista de operadores conhecidos por fazer isso. Minha preferência, para os problemas de exibição de PNG, é que a Microsoft conserte o IE, e parece que o IE versão 7 finalmente terá um tratamento de transparência PNG totalmente funcional, em todas as situações.
PNG e o Canvas Virtual
Embora normalmente o PNG NÃO salve a informação de tamanho do canvas virtual, ele salva a informação de offset do canvas virtual e, se presente, o IM tentará gerar um 'tamanho de canvas' que seja apropriado para aquele offset e tamanho de imagem. Isso pode ser importante de lembrar para alguns operadores de imagem como "[-crop](https://imagemagick.org/command-line-options/#crop)", "[-trim](https://imagemagick.org/command-line-options/#trim)" e "[-flatten](https://imagemagick.org/command-line-options/#flatten)", etc., que fazem uso do tamanho do canvas ou da página das imagens como parte de sua operação ou resultados. É claro que você pode usar a configuração "[-page](https://imagemagick.org/command-line-options/#page)" e o operador "[-repage](https://imagemagick.org/command-line-options/#repage)" para definir ou remover o tamanho e o offset do canvas virtual. (Veja Page Image Attribute). Por exemplo, o segundo "magick" do IM vê o offset presente nesta imagem PNG, e define um canvas grande o suficiente para garantir que a imagem fique visível dentro dos limites do canvas virtual (Adicionado ao IM v6.1.7)... |
magick rose: -repage 0x0+40+30 png:- |\
magick - -background LightBlue -flatten png_offset_flattened.jpg
![[IM Output]](../static/img/formats/png_offset_flattened.jpg)
No entanto, embora o formato PNG normalmente não salve a informação de tamanho do canvas, o IM adiciona alguns metadados de tamanho de canvas virtual às imagens PNG. Esses dados, porém, só serão utilizáveis por comandos do IM, e geralmente são ignorados por outros leitores do formato de imagem PNG. Por exemplo, o segundo comando "magick" vê alguma informação de tamanho de canvas virtual... |
magick rose: -repage 100x100+10+10 png:- |\
magick - -background LightBlue -flatten png_size_flattened.jpg
![[IM Output]](../static/img/formats/png_size_flattened.jpg)
Se o PNG for processado por algum programa não-IM, esses metadados de tamanho de canvas provavelmente serão perdidos. Lembre-se de que a informação de tamanho de canvas normalmente não faz parte do formato de arquivo de imagem PNG. A outra coisa a notar é que a informação de 'offset' pode ter um offset negativo (ao contrário do formato GIF), e o IM os tratará apropriadamente, tornando o formato bom para armazenar Layer Images intermediárias. | Alguns navegadores web não lidam muito bem com offsets negativos, produzindo resultados estranhos (uma versão do firefox tinha esse problema). É melhor evitar um offset negativo em imagens que possam ser usadas por outros programas como navegadores web.
---|---
Resolução, Densidade e Unidades do PNG
Após alguns testes, parece que o formato de arquivo de imagem PNG não suporta uma configuração de "[-units](https://imagemagick.org/command-line-options/#units)" de 'PixelsPerInch', apenas 'undefined' e 'PixelsPerCentimeter'. Por causa disso, o IM converte uma dada configuração de densidade/unidade para os valores apropriados de 'PixelsPerCentimeter'. Mais sobre este assunto em breve.
Subformatos PNG
| PNG: | Padrão. Salva a imagem usando um formato econômico. |
|---|---|
| PNG8: | O equivalente PNG ao GIF, incluindo transparência booleana e uma tabela de 256 cores. |
| PNG24: | Canais RGB de 8 bits sem canal alfa. Um caso especial pode incluir transparência booleana (veja abaixo) |
| PNG32: | Força um formato de imagem RGBA completo com semitransparência total. |
| PNG48: | Canais RGB de 16 bits sem canal alfa |
| PNG64: | Imagem RGBA de 16 bits (incluindo semitransparência) |
| PNG00: | Herda a cor e a profundidade de bits do PNG a partir da imagem de entrada. |
| Para mais informações, veja Image Type I/O Setting. | O PNG8 foi definido pelo PhotoShop, não pelo grupo PNG. E embora ele possa lidar com múltiplas cores semitransparentes, bem como uma cor totalmente transparente, o IM assume que não pode. Isso fornece uma maneira de forçar imagens a funcionar corretamente, por padrão, para serem legíveis pelo Internet Explorer v6. O programa "Photoshop CS" pode lê-lo. |
| --- | --- |
| Os estilos PNG48, PNG64 e PNG00 foram adicionados a partir do IM v6.8.2-0 | |
| --- | --- |
Você pode forçar o IM a criar uma tabela de índice de cores da imagem (ou paleta), e então o IM salvará essa imagem usando um formato "PNG8:"... |
magick {input_image} -type Palette indexed.png
Para forçar o uso de um único canal de tons de cinza de 8 bits, mas não uma imagem indexada por paleta, use...
magick {input_image} -type GrayScale -depth 8 gray.png
Você também pode (adicionado no IM v6.3.5-9) gerar tons de cinza com um canal de transparência.
magick {input_image} -type GrayscaleMatte gray_with_transparency.png
E para uma imagem simples de duas cores...
magick {input_image} -type BiLevel bitmap.png
Existe um caso especial para imagens PNG24. Se a imagem contém apenas transparência booleana, e todas as cores transparentes são iguais e essa cor é usada apenas para transparência, então o codificador PNG especificará essa cor específica como sendo transparente. Por exemplo... |
magick a.png -channel A -threshold 75% +channel \
-background hotpink -alpha background png24:a_png24_alpha.png
![[IM Output]](../static/img/formats/a_png24_alpha.png)
Esta imagem não tem uma paleta, mas tem algum alfa liga/desliga. O -threshold do canal alfa garante que apenas transparência booleana (liga/desliga) esteja presente, enquanto a opção Alpha Background garante que todos os pixels totalmente transparentes sejam de uma cor específica. O acima NÃO garante que não haja nenhum pixel opaco com aquela cor, então o acima ainda pode falhar.
Opções de Controle de Escrita PNG
Para controlar melhor a escrita de imagens PNG, Glenn Randers-Pehrson revisou uma série de controles "[Define Global Setting](basics.html#define)" do codificador, para o IM v6.5.2. Estes incluem...
- -quality '{level}{filter}'
- O nível básico de compressão e filtro ao salvar uma imagem PNG.
-define png:compression-strategy=zs
-define png:compression-level=zl
-define png:compression-filter=fm
Define completamente o sistema de compressão a ser usado para a imagem PNG que está sendo escrita. A configuração [-quality](https://imagemagick.org/command-line-options/#quality) normalmente definirá os valores _zl_ e _fm_, mas não a configuração _zs_.
- -depth
- A profundidade geral da imagem a ser gerada, tipicamente definida como 8 ou 16 bits.
- -define png:bit-depth={depth}
- Especifica precisamente a profundidade do formato de arquivo de imagem PNG resultante. Isso substitui o controle normal "
[-depth](https://imagemagick.org/command-line-options/#depth)" do IM, mas apenas para escrever imagens PNG, e apenas quando a mudança puder ser feita sem perda. No caso de imagens com mapa de cores, esta é a profundidade dos índices do mapa de cores, não das amostras de cor. - -define png:color-type={type}
- Especifica precisamente o tipo do arquivo PNG que está sendo escrito. Os valores podem ser '
0' | para Greyscale, que permite 'bit-depths' de 2, 3, 4, 8 ou 16.
---|---
'2' | para RGB, que permite 'bit-depths' de 8 ou 16.
'3' | para Indexed, que permite 'bit-depths' de 1, 2, 4 ou 8.
'4' | para Gray-Matte
'6' | para RGB-Matte
Note que "-define png:color-type='2'" é especificamente útil para forçar que os dados da imagem sejam armazenados como valores RGB em vez de valores sRGB. No entanto, um efeito similar pode ser alcançado usando "-set colorspace sRGB" em uma imagem RGB linear. No entanto, não espere que os programas honrem este espaço de cor linear ao ler. Isso inclui o ImageMagick.
- -profile PNG-chunk-{x}:{file}
-
Adiciona um perfil PNG bruto na localização {x} a partir de {file}. Os primeiros 4 bytes de {file} contêm o nome do chunk, seguido por um caractere de dois pontos ':', e então os dados do chunk. O {x} pode ser 'b' para colocar o perfil antes do PLTE, 'm' entre o PLTE e o IDAT, ou um 'e' para depois do IDAT. Se você quiser escrever múltiplos chunks do mesmo tipo, então adicione uma curta string única após o {x} para evitar que perfis subsequentes sobrescrevam os anteriores. Por exemplo..
-profile PNG-chunk-b01:file01 -profile PNG-chunk-b02:file02
+set date:create
+set date:modify
Estas são 'propriedades' de imagem que são criadas pelo ImageMagick sempre que ele lê um arquivo. Elas contêm (respectivamente) o horário de criação do arquivo de imagem (na verdade, o horário de mudança de permissão/proprietário/movimentação) e o horário da última modificação do arquivo. Infelizmente, os formatos de arquivo de imagem PNG gostam de escrever tais dados de imagem com o formato de arquivo de imagem PNG, e se esses dados forem diferentes, então o arquivo gerado também será diferente, mesmo que nada mais tenha mudado.
magick logo: logo.jpg magick logo.jpg
logo1.png
sleep 2; touch logo.jpg # change the JPG file timestamp
magick logo.jpg logo2.png
diff -s logo1.png logo2.png
magick compare -metric RMSE logo1.png logo2.png null:
O "diff' acima retornará a mensagem
"Binary files logo1.png and logo2.png differ"
Mesmo que o "magick compare" tenha retornado "0 (0)", o que diz que as imagens têm exatamente os mesmos dados de imagem. Note que, como o IM sobrescreve essas propriedades com os horários do arquivo PNG que acabou de ler, você não pode ver os valores reais dessas propriedades registrados no PNG usando "magick identify". A solução é salvar imagens PNG sem nenhum 'time stamp'.
magick logo: logo.jpg
magick logo.jpg +set date:create +set date:modify logo1.png
sleep 2; touch logo.jpg
magick logo.jpg +set date:create +set date:modify logo2.png
diff -s logo1.png logo2.png
Desta vez o "diff" reportou...
"Files logo1.png and logo2.png are identical"
À PARTE: você também pode usar outros programas UNIX como "cmp", "md5sum" ou "sha1sum" para comparar arquivos de imagem binários. Os dois últimos programas não são garantidos, mas são praticamente impossíveis de enganar e são mais rápidos para comparar mais de dois arquivos (usando o checksum). Graças a algumas adições do GlennRP, o desenvolvedor do PNG, você agora também pode usar "-define png:exclude-chunk=date" para dizer ao codificador PNG para não escrever chunks de texto relacionados a data.
Processamento PNG Não-ImageMagick
| Existe um bom número de aplicações auxiliares para PNG, que podem ser complementos úteis para gerar um arquivo de imagem PNG final. pngtrans | Informação PNG armazenada com uma imagem |
|---|---|
| pngcrush | Tenta encontrar a melhor compressão de um PNG, tentando comprimir a imagem usando toda compressão PNG lógica disponível, antes de fazer uma escolha final, para cada imagem individual. Isso, é claro, pode levar algum tempo em cada imagem. |
| OptiPNG | Um otimizador de compressão PNG mais novo. |
| pngquant | Otimizador PNG lossy, reduzindo uma imagem PNG para uma paleta de 8 bits de cores com dithering. Ele construirá PNGs de cor indexada com cores de transparência alfa transmitidas no chunk tRNS. |
| pngnq | Um quantizador PNG lossy mais novo, para gerar imagens PNG com tabela de 8 bits de cores. Também força o uso de uma paleta de cores. |
| pngout | Um otimizador PNG para plataforma Windows (com GUI opcional) que usa um compressor ZIP otimizado para espaço em vez de velocidade (também na página vinculada acima). |
| A maioria destes serve para melhorar o tamanho final do arquivo de imagem, seja usando técnicas lossy OU não-lossy. |
Perfis de Imagem
Lidar com perfis em imagens de qualidade fotográfica é importante. No entanto, pelo que posso dizer, esta é uma arte muito mágica, e não uma questão simples. Nem todos os formatos usam perfis, mas a maioria dos formatos modernos usa. Isso inclui JPEG, PNG, TIFF e (a partir do IM v6.3.4-1) GIF. Na verdade, o problema é agravado pelo fato de que muitos programas nem mesmo entendem ou procuram por perfis de cor em imagens. Alan Gibson, também conhecido como Snibgo montou um resumo de como vários navegadores web lidam com vários Perfis de Cor, em sua própria página Snibgo, ImageMagick Profiles. Vale a pena dar uma olhada. Para listar quais perfis estão presentes em uma imagem, use...
magick identify -verbose image.tif | grep 'Profile-.*bytes'
Perfis Comuns (e ponteiros para informações que tenho sobre eles) incluem...
EXIF | [Digital Camera Meta-Data](photos.html#exif)
---|---
ICC | Image Color Space Profile
ICM | Microsoft Color Management (like ICC)
IPTC | Image and Author Info
8BIM | Perfil de metadados do Photoshop. Incluindo dados sobre: Clip Paths... O que mais?
XMP | Adobe's Extensible Metadata Platform (XMP) (Veja adobe page)
Você pode extrair esses perfis comuns usando alguns formatos de saída especiais que o IM fornece para esse propósito. Por exemplo...
magick -define jpeg:size=64x64 image.jpg iptc:profile.iptc
magick -define jpeg:size=64x64 image.jpg xmp:profile.xmp
A opção "[-define](https://imagemagick.org/command-line-options/#define)" acima é usada como uma 'dica' para a biblioteca JPEG reduzir a quantidade de dados de imagem reais que ela lê para a memória e, assim, economizar muito processamento dos dados que você na verdade não pretende usar. Você também pode inserir ou reinserir um perfil arbitrário como um 'blob' ou string binária contendo qualquer informação que você quiser.
-profile '_profile_name_ :_data_file_ '
Ou seja, o arquivo "data_file" é adicionado 'como está' à imagem como o perfil profile_name. O IM ou qualquer outra aplicação ignorará tais perfis, a menos que saiba especificamente sobre ele.
Conceitos Básicos de Perfil de Cor
Primeiro, uma palavra rápida...
Color Management is for Wimps -- Don't Play with them
Messing with profiles generally makes things worse
Então, se as cores parecem boas... Deixe-as em paz. Um usuário fhoech nos Fóruns do IM (que desde então desapareceu) postou várias vezes a seguinte introdução básica sobre o uso de perfis de cor para alterar o espaço de cor usado pelas imagens... RGB, sRGB e CMYK não são espaços de cor, são sistemas de cor (que o IM controla usando o operador "[-colorspace](https://imagemagick.org/command-line-options/#colorspace)"). Não existe um único espaço de cor RGB ou CMYK, mas uma quantidade literalmente infinita de diferentes espaços de cor é possível em cada sistema de cor. Você precisa de perfis ICC (ou ICM) que caracterizem com precisão as cores em suas imagens. Normalmente, o perfil ICC que descreve uma imagem deveria estar embutido na própria imagem; caso contrário, você tem que usar uma tentativa de 'melhor palpite', que é apenas uma solução alternativa: Abra a imagem em um editor de imagem capaz de lidar com ICC e atribua diferentes perfis ICC (não converta!) até encontrar um que pareça OK com sua imagem (seu monitor deve estar calibrado para que você realmente obtenha uma boa pré-visualização das cores). Então, salve a imagem com o perfil embutido. Quanto ao porquê de você precisar de dois perfis: O perfil de origem descreve as cores em sua imagem como elas estão agora. O perfil de destino descreve as cores na imagem de saída após a conversão. Além disso, você deve ter muito cuidado ao converter para um dado perfil de destino: Se, por exemplo, você usar um perfil que descreve impressão offset em papel não revestido, mas pretende usar as imagens para impressão em papel revestido, é claro que você não obterá bons resultados. O perfil de saída precisa ser uma representação precisa da sua condição de saída pretendida. Ao converter de um espaço de cor subtrativo para um aditivo (ou vice-versa) sem usar o perfil correto (para ambas as etapas da conversão), você não obterá cores ou brilho 'corretos' na maioria dos casos, embora você possa ter sorte e acertar 'por acidente'. Você pode baixar perfis de cor do International Color Consortium.
Alterando o Espaço de Cor via Perfis
Embora você possa simplesmente converter espaços de cor diretamente assim...
magick _cmyk_image.jpg_ -colorspace rgb _rgb_image.jpg_
A melhor solução para converter CMYK para RGB JPEG é usar perfis de cor com o operador "[-profile](https://imagemagick.org/command-line-options/#profile)". Raf Lenaerts apontou as seguintes regras no uso do operador "[-profile](https://imagemagick.org/command-line-options/#profile)" dentro do ImageMagick...
Se não houver perfil embutido, então o primeiro "`[-profile](https://imagemagick.org/command-line-options/#profile)`" é o perfil de entrada. Um segundo "`[-profile](https://imagemagick.org/command-line-options/#profile)`" então define o perfil de saída.
Se houver um perfil embutido, então um único operador "`[-profile](https://imagemagick.org/command-line-options/#profile)`" definirá imediatamente o perfil de saída.
Em resumo...
- O "
[-profile](https://imagemagick.org/command-line-options/#profile)" deve ser colocado entre o arquivo de entrada e o de saída.
Esta é, na verdade, a IM Command Line Processing Practice padrão. - Use "
[+profile](https://imagemagick.org/command-line-options/#profile)" com 'icm' para remover qualquer icc-profile presente. - O primeiro "
[-profile](https://imagemagick.org/command-line-options/#profile)" dado, então, é o perfil de entrada. - O segundo "
[-profile](https://imagemagick.org/command-line-options/#profile)" dado é o perfil de saída.
Por isso, para usar perfis em TODAS as imagens, você precisará de três operações "[-profile](https://imagemagick.org/command-line-options/#profile)": as opções de perfil de remoção, entrada e saída. Por exemplo, se a imagem de entrada já tiver um perfil de cor, então apenas um é necessário.
magick _rgb_image.jpg_ -profile USCoat.icm _cmyk_image.jpg_
Mas se a imagem não tiver (ou você souber que é uma imagem RGB, sem um perfil existente), você pode usar...
magick _rgb_image.jpg_ +profile icm \
-profile sRGB.icc -profile USCoat.icm _cmyk_image.jpg_
Isso define a imagem resultante para um perfil CMYK USCoat.icm. Outro perfil CMYK é o perfil SWOP.icm. Para o inverso (a imagem já tem um perfil), use...
magick _cmyk_image.jpg_ -profile sRGB.icc _rgb_image.jpg_
AVISO: Se a imagem original já contiver um perfil, por exemplo um perfil CMYK, então dar duas conversões de perfil é uma má ideia. Por exemplo
magick _cmyk_image.jpg_ -profile "CMYK.icc" -profile "RGB.icc" \
_output_image.jpg_
Resultará em uma conversão CMYK -> CMYK -> RGB. Mas como o CMYK não é simétrico, a etapa de conversão extra pode resultar em uma conversão de cor desastrosa. (Veja a discussão no Fórum do IM Question on ICC profile conversion behaviour)
Modificação de Perfil de Cor
As imagens que você quer converter devem todas ter perfis ICC embutidos. Por isso, para converter suas imagens com o mesmo perfil ICC CMYK...
magick _rgb_image.jpg_ -profile CMYK_PROFILE _cmyk_image.jpg_
Isso converterá usando a intenção perceptiva, o padrão (veja Color Space Conversion para uma explicação detalhada sobre intenções de renderização). Como os resultados via intenção perceptiva podem diferir muito dependendo do software que foi usado para criar os perfis ICC, você pode usar "[-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation)" junto com "[-intent](https://imagemagick.org/command-line-options/#intent) relative" para obter um resultado que esteja um pouco mais próximo do que se poderia esperar.
magick _rgb_image.jpg_ -intent relative -black-point-compensation \
-profile CMYK_PROFILE _cmyk_image.jpg_
| Tanto as configurações "[-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation)" quanto "[-intent](https://imagemagick.org/command-line-options/#intent)" precisam ser especificadas antes da operação "[-profile](https://imagemagick.org/command-line-options/#profile)" para que sejam efetivas.
---|---
| A opção "[-black-point-compensation](https://imagemagick.org/command-line-options/#black-point-compensation)" foi adicionada ao IM v6.2.7-0.
---|---
Você pode baixar perfis de cor do International Color Consortium.
EXIF InterColorProfile
Além do tratamento de Perfil de Cor acima, muitas Câmeras Digitais salvam informações de perfil de cor no atributo de perfil EXIF 'InterColorProfile'. Este atributo destina-se a ser "assumido na ausência de um perfil de cor embutido", de acordo com o documento "Colour Management and Adobe PhotoShop 7".
Perfis IPTC
O perfil IPTC é usado em imagens para armazenar atributos de identificação da imagem, como legenda, crédito, autor, palavras-chave, etc. Se você quiser adicionar um perfil IPTC a uma imagem, você precisa de um único -profile:
magick _image.jpg_ -profile iptc _iptc_image.jpg_
Se uma imagem contém um perfil, você pode salvá-lo com isto, para que você possa adicionar esse perfil a outras imagens similares:
magick _iptc_image.jpg_ iptcData.iptc
Ou você pode extrair uma versão de texto do perfil que você pode editar
magick _iptc_image.jpg_ IPTCTEXT:iptcData.pro
Aqui, por exemplo, está um perfil contribuído por fcaserio nos IM Forums.
Você pode adicionar este perfil a uma imagem usando
magick _image.jpg_ +profile 8BIM -profile 8BIMTEXT:iptcData.pro \
iptc_image.jpg
Essa imagem pode ser convertida em um EPS (Encapsulated Postscript) com uma pré-visualização TIFF (EPT), que também contém o perfil IPTC. (Obrigado Tee Tanne).
magick _itpc_image.jpg_ EPT:image.eps
Perfis XMP
Extraia um perfil XMP de uma imagem TIF...
magick picture.tif metadata.xmp
Uma palavra sobre os formatos de Imagem Vetorial
| Existe mais de um estilo de armazenamento de imagem no mundo... Raster | Imagens que são armazenadas e processadas usando arrays de pixels coloridos. Os formatos de imagem raster incluem GIF, PNG, JPEG, TIFF, e assim por diante. As imagens podem consistir em múltiplos arrays (canais) representando cores diferentes, e podem ter múltiplas imagens, camadas ou quadros (dependendo do uso) em um único arquivo de formato de imagem. |
|---|---|
| Vetorial | As imagens são definidas em termos de linhas, espessuras, ladrilhos, gradientes e objetos compostos maiores. Os formatos incluem SVG, Postscript, PDF, FIG, DXF, WMF, e até fontes TTF. Isso permite que as imagens sejam redimensionadas, e até bastante ampliadas sem perda de qualidade. Além disso, ao editar tais formatos, você geralmente pode mover objetos inteiros sem destruir o que está embaixo (sobreposição de objetos). |
| Fractal | As imagens são um caso especial raro, usado para alcançar compressão extrema de imagens complexas, como pinturas antigas. No entanto, o único uso que conheço é em um produto comercial muito caro. Fora desse uso, também é empregado para objetos matemáticos complexos como os conjuntos de Mandelbrot e Julia, e na geração de respingos aleatórios de cor em protetores de tela (IFS). É visto muito raramente. |
| Por que isso é importante? Porque o IM é um 'processador de imagem raster', e embora ele possa ler ou escrever imagens armazenadas em um dos formatos vetoriais, ele o faz convertendo a imagem de e para uma imagem raster interna. Consequentemente, se você está tentando converter uma imagem de um formato vetorial para outro formato vetorial, o IM essencialmente rasterizará esta imagem na resolução ou densidade atualmente definida, que esperançosamente (mas improvavelmente) será adequada para o dispositivo de saída no qual você pretende usá-la. Em outras palavras, qualquer saída do IM nunca será um verdadeiro formato vetorial. Embora ele possa converter seu formato raster interno em um arquivo de formato vetorial, o resultado é apenas um invólucro vetorial superficial em torno de uma imagem em formato raster. E a menos que a imagem raster seja definida corretamente (na resolução certa) para o dispositivo de saída, o resultado não será particularmente bom. Infelizmente, novos usuários do IM não sabem nada sobre isso. Eles veem o IM como um conversor que pode converter, digamos, PDF para Postscript, produzindo imagens com efeitos de aliasing 'em blocos', cores 'desbotadas', ou imagens borradas que simplesmente não ficam nada boas no dispositivo de saída pretendido. O que nos leva ao que estou tentando dizer... |
Evite usar o ImageMagick para conversões de 'Imagem Vetorial' para 'Imagem Vetorial'
EX: converter entre formatos como: PDF, PS, SVG
Em outras palavras, use a ferramenta certa para o trabalho certo. E para esta situação, o ImageMagick não é a ferramenta certa.
Isso não quer dizer que o IM não possa ser usado para fazer tal conversão. Afinal, a maioria das impressoras e monitores na verdade rasterizam a imagem eles mesmos para a impressão real em uma folha de papel. A diferença é que a impressora sabe qual resolução ela precisa para o hardware que está usando. O ImageMagick não sabe. Para exemplos de conversão de imagens vetoriais em rasters (e como melhorar tais conversões), veja o exemplo Texto e Gráficos pré-formatados em Postscript/PDF como Entrada, e para SVG e imagens vetoriais geradas pelo usuário veja Manipulação de Imagens SVG. Você também pode achar útil a informação sobre Tamanho da Fonte, Resolução e Pointsize, particularmente no que diz respeito ao efeito do "[-density](https://imagemagick.org/command-line-options/#density)" em fontes de texto desenhadas.
Alternativas Não-IM
Se você realmente precisa fazer conversão geral entre formatos vetoriais, o programa UniConvertor, Sk1 Project (geralmente disponível como um pacote linux padrão) e o VectorSection podem ser usados para converter de vetorial para vetorial sem realmente rasterizar as imagens. Para conversão geral de Postscript para outros formatos vetoriais, veja "[pstoedit](http://www.pstoedit.net/pstoedit)", que normalmente está disponível nos repositórios de pacotes extras do seu sistema. Veja também "[epstopdf](http://www.ctan.org/tex-archive/support/epstopdf/)" que faz parte da Comprehensive TeX Network (CTAN). TeX e LaTeX são sistemas UNIX de processamento de texto de documentação (livros e artigos científicos). Possuem muitas ferramentas relacionadas aos formatos Postscript e PDF. Para conversão de SVG para PDF, Wolfgang Hugemann Auto@hugemann.de sugere que a conversão vetorial para vetorial mais fácil é exibir o SVG em um navegador (Firefox) e então imprimi-lo usando um driver de impressora PDF. Embora o "Uniconvertor" também pudesse ser usado.
Outros Formatos de Arquivo de Imagem
Existe, é claro, um número enorme de outros formatos de arquivo de imagem que o IM pode usar e entender, no entanto, muitos desses formatos menos 'comuns' são especializados para algum propósito específico, e frequentemente exigem alguns ajustes ou outras opções para fazê-los funcionar da maneira que você deseja. Não recomendo esses formatos de arquivo, e geralmente eu mesmo não os uso. No entanto, tento registrar várias notas, técnicas e opções que foram relatadas na lista de e-mail do IM, ou no fórum do IM, para que outros também possam usar a informação coletada.Muitas das notas estão em uma forma bruta, não processada, e estou disposto a aceitar mais contribuições, ou reescritas das notas abaixo.
Postscript (PS, EPS) e Adobe PDF
Para manipulação básica veja Manipulação de Texto em Postscript e o aviso sobre formatos de Imagem Vetorial. O maior problema com o Postscript e seus formatos relacionados (como o PDF) é que é uma linguagem complexa de formatação de página. Ou seja, o formato é um programa e não realmente um formato de imagem! Isso significa que o IM é forçado a depender de outro programa externo (ou delegate) para 'executar' o programa e retornar a imagem gerada.
Encapsulated Postscript (EPS)
O Encapsulated Postscript é na verdade exatamente o mesmo que o postscript normal (um formato de imagem vetorial), exceto que é uma imagem de página única, e uma entrada "Bounding Box" está presente para definir a área exata que a imagem cobre. O formato foi projetado para permitir que outros programas movam e dimensionem a imagem ao inserir o postscript que ela define em outros documentos postscript. O IM o manipula basicamente da mesma forma que o postscript. (Veja acima).
magick image.jpg -compress none eps2:image.eps
Use "EPS2:" ou "EPS3:" para criar arquivos EPS comprimidos com JPEG: Nota: A adição de perfis a imagens EPS está na lista de 'a fazer', mas atualmente não é suportada.
Entrada Postscript/PDF
Como este formato é um formato de imagem vetorial, ele é afetado por configurações como "[-page](https://imagemagick.org/command-line-options/#page)", e "[-density](https://imagemagick.org/command-line-options/#density)". Exemplos de leitura de Postscript (que é o mesmo para os formatos EPS e PDF) são fornecidos em Texto Formatado em Postscript, e você deveria ler isso primeiro. No entanto, a leitura desses formatos é muito complicada, pois são linguagens de computador completas projetadas especificamente para gerar uma página impressa em impressoras laser de alta qualidade. Isso está muito além do escopo do ImageMagick, e por isso ele depende de um programa delegate especializado conhecido como "ghostscript" para ler e converter páginas Postscript e PDF em uma imagem raster. Um ponto. Como o IM usa o Ghostscript para rasterizar um arquivo postscript em uma resolução específica, qualquer imagem raster que esteja no arquivo postscript frequentemente ficará borrada ou distorcida, a menos que a densidade exata daquela imagem raster seja conhecida. Isso também pressupõe que o próprio programa postscript não rotacione ou manipule de outra forma a imagem raster. Na verdade, múltiplos delegates estão presentes e são selecionados pelo IM dependendo da situação. Por exemplo, o 'ps:color' (usando o dispositivo ghostscript 'bmpsep8') versus o 'ps:alpha' (usando 'pngalpha') é selecionado dependendo de se "-channel RGBA" foi definido ou não. O delegate 'ps:color' é usado em vez do 'ps:alpha' por padrão porque o dispositivo ghostscript 'pngalpha' suporta apenas uma página/uma imagem e os PDFs geralmente têm múltiplas páginas. Use "-channel RGBA" antes de ler a imagem para selecionar o método de delegate 'pngalpha'. Se tudo o que você quer é o número de páginas, usar o ghostscript pode ser muito mais rápido.
gs -q -sPDFname=document.pdf pdfpagecount.ps
%%Pages: 96
Windows e Ghostscript é um pouco mais complexo, pois requer o uso do registro do windows.
Opções especiais de Leitura de PDF do ImageMagick
Opções especiais para manipulação de PDF...
-units PixelsPerInch- Deve ser definido ao manipular documentos PDF (leitura ou criação). Não tenho certeza do que isso faz, mas relatos indicam que deve ser definido para o funcionamento correto.
-define pdf:use-cropbox=true- Use um 'cropbox' em vez do 'mediabox' padrão como nos arquivos PDF gerados pela Adobe. (Basicamente adiciona um "
-dUseCropBox" à conversão do ghostscript a partir de imagens PDF). NOTA: Isso funciona se o seu PDF tiver apenas uma página, mas se for um PDF de múltiplas páginas, não recortará corretamente. -define pdf:use-trimbox=true- Use um 'trimbox' em vez do 'mediabox' padrão como nos arquivos PDF gerados pela Adobe.
Modificando o Delegate de Entrada
Modificar o delegate do sistema é perigoso e um erro poderia tornar o IM incapaz de ler arquivos postscript/PDF. Você também pode precisar de privilégios de administração, pois não pode substituir um delegate definido pelo sistema por um delegate pessoal, devido a medidas de segurança (contra 'hackers'). Veja Delegates e Coders para Formatos de Imagem para mais informações sobre a sintaxe e o significado do XML de delegate, e a criação de delegates pessoais de entrada/saída. No tópico do fórum Convert EPS to JPG Unreliable, foi sugerido que você edite seu "delegates.xml" do sistema e substitua "-sDEVICE=bmpsep8" por "-sDEVICE=bmp16". Outros usuários descobriram que mudar isso para "-sDEVICE=pnmraw" também funciona melhor. Eu mesmo não tentei isso, então não posso dar nenhuma garantia sobre isso, ou sobre quais versões do Ghostscript isso se aplica. Se você tiver mais informações, por favor me avise. Se você tem um arquivo postscript ou PDF em CMYK, então a página Blog of John detalha como você pode modificar a entrada do delegate (adicionar uma opção "-dUseCIEColor" do ghostscript) para que o ghostscript convert manipule esse tipo de postscript. Outra possibilidade é criar um Delegate pessoal que invocaria o pdftoppm. Digamos que a tag seja chamada "pdfalt" que invoca o programa "pdftoppm" ou até "pdfimage" do pacote "xpdf". Então seu fluxo se pareceria com algo assim:
magick pdfalt:image.pdf image.png
Alguém gostaria de tentar criar o delegate? Nos avise! Você também pode querer tentar usar o "pstoedit" que pode converter um arquivo postscript em outros formatos vetoriais, ou passar o postscript para a API do ImageMagick, para convertê-lo em bitmap. Não experimentei nem testei isso, e gostaria de algum feedback.
Extração de Imagem Raster de PDF
A renderização de quaisquer páginas PDF para um tamanho ou 'densidade' específica está no cerne dos gráficos vetoriais usados pelo PDF. Funciona muito bem para texto, ou desenhos de linha. Mas isso também significa que qualquer imagem raster (array de pixels) dentro do PDF tem que ser redimensionada. Mas o redimensionamento é uma operação 'com perdas', resultando em alguma degradação da imagem, a menos que você use a densidade original daquela imagem raster, que pode variar de imagem para imagem dentro do PDF! Portanto, é vantajoso poder extrair as imagens raster de um PDF sem qualquer referência de 'densidade'. Você pode extrair as imagens raster diretamente usando o programa "pdfimages", que faz parte dos pacotes de software poppler-utils ou "xpdf-utils. Esses pacotes de software também contêm muitas outras ferramentas que você pode achar úteis para o processamento de PDF. Veja Poppler for Windows e Xpdf Reader. Você também pode querer dar uma olhada no "mutool" do pacote "MuPDF" das mesmas pessoas que cuidam do GhostScript. Uma ferramenta online para extrair texto e imagens é o Sumnotes (comercial com avaliação gratuita limitada). Em um nível mais baixo, Wolfgang Hugemann diz que você pode extrair qualquer imagem contida em um PDF (especialmente de PDFs gerados por scanners). Basicamente, extraindo qualquer sequência de bytes entre "stream" e "endstream", e salvando como um arquivo separado.
Extração de Texto de PDF
Você pode usar o programa GhostScript "ps2ascii" ou "pstotext". Ou, como uma alternativa que faz tanto texto quanto imagens, dê uma olhada no "pdftohtml" que tem uma saída XML que Ross Presser relata ser "bastante boa em remontar parágrafos. ". Além disso, o programa "pdftk" pode 'descomprimir' um PDF para que ele possa ser editado diretamente, e para 'reparar' PDFs corrompidos.
Opções de Saída Postscript/PDF
Sabe-se que as seguintes configurações afetam a saída dos formatos de imagem Postscript, Encapsulated Postscript e PDF: "[-page](https://imagemagick.org/command-line-options/#page)", "[-gravity](https://imagemagick.org/command-line-options/#gravity)", "[-compress](https://imagemagick.org/command-line-options/#compress)", "[-density](https://imagemagick.org/command-line-options/#density)", Por padrão, nenhuma compressão é usada na saída de imagem PDF, então os arquivos PDF podem frequentemente ser muito maiores do que o necessário. A tabela a seguir equipara os modos de compressão do IM com o modo de compressão Postscript resultante usado.
| Significados de Compressão PS/PDF Compressão | configuração '/Filter [ ... ]' da imagem |
|---|---|
"-compress none" |
'/ASCII85Decode' |
"-compress zip" |
'/FlateDecode' |
"-compress jpeg" |
'/DCTDecode' |
"-compress lzw" |
'/LZWDecode' |
"-alpha off -monochrome -compress fax" |
'/CCITTFaxDecode' |
"+compress" |
|
"-compress rle" |
|
| qualquer outra coisa | '/RunLengthDecode' |
As compressões recomendadas para PDF são Zip (Compressão Deflate) ou Group4 (Fax).
magick image.gif -alpha off -monochrome -compress Zip -quality 100 \
-units PixelsPerInch -density 600 image_deflate.pdf
magick image.gif -alpha off -monochrome -compress Group4 -quality 100 \
-units PixelsPerInch -density 600 image_group4.pdf
Esses dois comandos produzem arquivos PDF muito menores do que uma conversão direta de uma página em preto e branco. No entanto, qual é menor depende da imagem e é impossível determinar sem tentar e testar o tamanho resultante.
Alternativas de Saída Postscript/PDF
Lembre-se de que o PDF é um formato de imagem vetorial (documento), e o IM é um processador de imagem raster. Isso significa que qualquer documento PDF que o IM cria basicamente consistirá em uma única imagem raster por página. As imagens de saída no documento PDF serão fixadas em uma resolução específica (ou densidade de pixels), o que pode causar problemas de distorção de pixels quando visualizado ou impresso em alguma outra resolução. Além disso, para documentos de texto, usar uma imagem raster é um desperdício, pois texto simples com fontes e metadados de formatação será sempre muito menor e renderizará melhor do que uma imagem raster digitalizada do texto. Por causa disso, outros programas de criação de PDF podem ser mais adequados às suas necessidades. Isso permitirá que você mantenha imagens como imagens, e texto como texto, permitindo posicionar o texto e as imagens juntos de uma maneira mais agradável e lógica, bem como inserir texto, e sobrepor setas ou linhas de conexão, de uma forma mais lógica. Por exemplo, sugiro que você dê uma olhada nos programas de suporte fornecidos pelo sistema TeX e LaTeX. Veja Comprehensive TeX Network (CTAN). Outro conjunto de ferramentas é o Multivalent Document Tools. É claro que tais programas são mais difíceis de automatizar, no entanto, no passado eu usei o simples formato de arquivo de gráfico vetorial FIG (veja Xfig) para gerar documentos Postscript e PDF com texto e gráficos colocados de forma automática. Conversores de Imagem para PDF... A ferramenta sam2p que é especializada em converter imagens em arquivos PDF. Então faça todo o pré-processamento com o ImageMagick e depois faça a conversão final usando o "sam2p". Ele até traz um pequeno script para ajustar o resultado a um papel A4. Do sam2p README: Q58) |
O sam2p pode gerar um PDF que seja escalado proporcionalmente (ou seja, mantendo a proporção) para um tamanho de página especificado, e centralizado na página? |
|---|---|
| A58) | Não, mas o script Perl sam2p_pdf_scale.pl empacotado com o sam2p pode pós-processar o arquivo criado pelo sam2p. Por exemplo, para escalar e centralizar um PDF em um papel A4, faça: |
sam2p input.img output.pdf
sam2p_pdf_scale.pl 595 842 output.pdf
Infelizmente, não funciona com PDFs padrão criados pelo IM. -- Sebastian Krause, da Lista de E-mail de Usuários do IM Documentos PDF de Múltiplas Páginas... Você pode usar perl para combinar múltiplos arquivos PDF, sem recorrer ao IM e ao seu problema de rasterização...
#!/usr/bin/perl # Script pdf-combiner.pl use strict; use warnings; use PDF::Reuse; prFile('combo.pdf'); # Output. for (qw/a b c d/) # Inputs. { prImage("result_$_.pdf"); prPage(); } prEnd();
Você também pode usar um toolkit JAVA para mesclar imagens geradas pelo IM em um PDF, produzindo um PDF melhor do que o mais simples que o IM gerará...
#!/bin/bash for x in ./*.jpeg do echo $x to ${x}.pdf magick $x -quality 75 ${x}.pdf done echo Merging... java tool.pdf.Merge *.pdf
Outro usuário nos Fóruns de Discussão do IM também sugeriu usar o PDFjam para mesclar múltiplas páginas PDF.
Formato de Arquivo de Imagem PbmPlus / NetPBM: PBM PGM PPM PNM PAM
Os filtros de manipulação de imagem PbmPlus ou "NetPBM" (linha de comando unix). Esses formatos de imagem vêm em uma variedade de estilos "PBM" (bitmap), "PGM" (escala de cinza), "PPM" (colorido), "PFM" (ponto flutuante, para HDRI), "PAM" (formato arbitrário), e "PNM" (qualquer formato NetPBM). Cada um destes (exceto "PAM" e "PFM") também pode estar tanto na forma binária 'bruta' (o padrão ao escrever pelo IM ou NetPBM), quanto no formato de texto ASCII simples, (definido usando "[-compress](https://imagemagick.org/command-line-options/#compress) None"). O IM pode é claro ler qualquer um deles. O formato deve ser considerado como usando apenas o espaço de cor "linear-RGB", e NÃO usando "sRGB" como a maioria dos outros formatos de arquivo de imagem. No entanto, uma profundidade de 16 deve ser usada ao usar "linear-RGB", então cautela é recomendada para evitar erros pesados de arredondamento com imagens de profundidade 8. Os formatos NetPBM normalmente salvam uma imagem por arquivo. No entanto, o IM, e muitos outros utilitários NetPBM, lerão e escreverão arquivos com múltiplas imagens simplesmente concatenadas juntas. Como tal, ao escrever imagens, pode ser uma boa ideia definir a configuração apropriada "[-/+adjoin](https://imagemagick.org/command-line-options/#adjoin)" ao escrever arquivos. (Veja Escrevendo Sequências de Múltiplas Imagens para detalhes). O formato de arquivo PPM é na verdade especialmente importante para o ImageMagick, pois é o formato de comunicação usado durante a conversão de imagens Postscript e PDF via o delegate "ghostscript". Também é um formato importante para o processamento de imagem de vídeo, como do comando "ffmpeg". Qualquer 'qualidade' ou faixa de valor pode ser usada na entrada (até 16 bits ou 65535 de 'profundidade'). Por exemplo, aqui está uma faixa de valor altamente incomum de 5, para gerar um 'gradiente em degraus'. Não conheço nenhum outro formato de imagem que permita usar uma faixa de qualidade tão peculiar. |
echo "P2 6 1 5 0 1 2 3 4 5" | \
magick - -scale 120x20 pgm_step_gradient.gif
![[IM Output]](../static/img/formats/pgm_step_gradient.gif)
Veja também Gradientes Redimensionados onde imagens de texto NetPBM são usadas para criar imagens muito pequenas (de 2 a 4 pixels). O exemplo acima também demonstra o quão úteis os sub-formatos 'ASCII' podem ser. Especialmente como uma forma de adicionar imagens em scripts de shell, ou como meio de gerar imagens a partir de um array de números. Por exemplo, veja TXT: Formato de Pixel Enumerado. Um exemplo desse uso é mostrado nos exemplos de Metodologia de Redistribuição de Histograma.
PbmPlus/NetPBM vs Formato de Dados ASCII
Sua saída ASCII é provavelmente o método mais limpo de extrair os valores de cor de uma imagem específica, o que novamente o torna idealmente adequado para scripts e processamento simples de imagem.
magick -size 20x2 xc: +noise random -channel G -separate +channel \
-depth 16 -compress none pgm_random_values.pgm
Note que quando a saída é texto simples, as linhas não são escritas de forma a se alinhar com o comprimento das linhas das imagens. Mas você pode reformatar a saída usando os vários utilitários de texto do UNIX. Por exemplo, você pode usar o utilitário de texto "tr" para substituir e comprimir múltiplas vírgulas e espaços em uma única quebra de linha, colocando todos os valores um por linha, tornando mais fácil para um script processá-los. Além disso, com o IM você só pode especificar uma 'profundidade' de 8 ou 16 para a qualidade de saída de PGM e PPM. Enquanto os formatos PbmPlus permitem o uso de qualquer 'maxval' para seus valores, até mesmo um que não seja uma potência de dois! Ele tem um limite rígido de 16 bits de profundidade (maxval 65535). Um controle mais fino do 'maxval' real da imagem NetPBM não é possível atualmente, embora pudesse ser adicionado via uma configuração especial de coder no futuro. (se solicitado). Aqui está outro exemplo gerando um array 9x9 de valores em escala de cinza de 0 a 255, extraído da imagem interna rose. Eu usei "pnmtopnm -plain" para obtermos uma quebra de linha no final de cada linha de pixels.
magick rose:[9x9+0+0] -colorspace gray -transpose -depth 8 PGM:- |\
pnmtopnm -plain
Variantes mais antigas deste comando NetPBM incluem "pnmnoraw" e "pnmtoplainpnm", para fazer a mesma coisa que "pnmtopnm -plain". Verifique a página de manual dos seus pacotes NetPBM, pois os desenvolvedores parecem não conseguir decidir como isso deve ser feito. Qualquer um desses programas PbmPlus produzirá uma quebra de linha no final de cada 'linha de imagem', o que o coder do ImageMagick não faz. Isso pode tornar o processamento de imagem em scripts muito mais fácil. Aqui está um exemplo de saída de um bitmap PBM ASCII muito pequeno.
magick label:O pbm: | pnmtopnm -plain
Note que os bitmaps PBM nem precisam emitir espaços entre os valores, embora sejam permitidos (o IM os emite, os utilitários PbmPlus não). Note também que para bitmaps branco='0' (fundo) e preto='1' (primeiro plano). Este é um padrão para formatos de bitmap como XBM e PBM, e o ImageMagick entende essa convenção. Se isso não for desejável, Negue a imagem, ou use Nivelar Imagens por Cor para definir as cores desejadas da imagem bitmap.
Controle de Profundidade PbmPlus/NetPBM
Às vezes você quer mais controle sobre a profundidade de imagens PGM e PPM, por exemplo, para usar uma faixa percentual de valores de 0 a 99. Um método é usar o programa NetPBM "pamdepth", que pode converter imagens para qualquer faixa (até os limites internos de 65335). Aqui, por exemplo, está um array de imagem de valores, mas usando uma faixa de valores de saída de 0 a 99.
magick -size 9x9 radial-gradient: -depth 16 PGM:- |\
pamdepth 99 | pnmtopnm -plain
Aqui está outro exemplo, mas desta vez usando o operador Nível Invertido para definir a faixa de valores de saída. Isso pode dar a você mais controle sobre a transformação dos valores, mas o 'maxval' na imagem PGM não corresponde ao valor máximo da imagem.
magick -size 9x9 radial-gradient: +depth +level 0,99 PGM:- |\
pnmtopnm -plain
O "[+depth](https://imagemagick.org/command-line-options/#depth)" no comando acima é vital para definir a profundidade do arquivo de imagem para a mesma do nível de qualidade do IM. Tudo o que é necessário é redefinir (ou ignorar) a terceira linha para um valor de '99', e opcionalmente comprimir a imagem de volta para um formato de imagem NetPBM binário 'bruto'. No entanto, como o PbmPlus/NetPBM tem uma profundidade máxima de 65535 (16 bits), isso só funcionaria para versões Q8 ou Q16 do IM.
Comentários PbmPlus/NetPBM
O IM lerá, escreverá e preservará linhas de 'comentário' no cabeçalho do formato de arquivo PbmPlus/NetPBM. Por exemplo...
magick -size 2x2 xc:grey -set comment "by Anthony" -compress none PGM:-
No entanto, dito isso, a maioria das aplicações, incluindo o próprio PbmPlus, ignorará tais comentários, e até os perderá quando processa o arquivo.
magick -size 2x2 xc:grey -set comment "by Anthony" PGM:- | pnmtopnm -plain
PbmPlus/NetPBM vs ImageMagick
O conjunto de processamento de imagem PbmPlus/NetPBM já foi um rival do ImageMagick para processamento de imagem por linha de comando, mas usa uma filosofia de filtragem de pipeline completamente diferente (de mais baixo nível) para a manipulação e processamento de imagem. Isso o torna fácil de usar em scripts de shell, mas mais difícil de usar para processamento de imagem geral ou muito complexo. Também significa que a imagem é convertida de e para o formato de arquivo de imagem com muito mais frequência, e geralmente requer o uso de muitos arquivos temporários. As imagens PbmPlus/NetPBM geralmente não lidam com Transparência (embora o formato PAM mais novo o faça), e não fornecem uma maneira geral de passar metadados da imagem junto com os dados da imagem. Todos os formatos PbmPlus/NetPBM (como o formato interno do ImageMagick, veja Streaming de Imagem MIFF) podem lidar com um fluxo de múltiplas imagens, simplesmente concatenando ou anexando as imagens juntas, uma após a outra. Isso o torna muito bem adequado para métodos de processamento de imagem em pipeline, com streaming de múltiplas imagens, como para o processamento de vídeo. No entanto, esteja avisado de que alguns programas PbmPlus/NetPBM lidam apenas com imagens individuais e não lidarão com um fluxo de múltiplas imagens. No entanto, como é de mais baixo nível, e anterior ao ImageMagick, é frequentemente selecionado para saídas de imagem bruta, como saída e manipulação de imagem de vídeo. As imagens PbmPlus também são mais frequentemente usadas para dados científicos, e como tal as imagens são tipicamente armazenadas no espaço de cor 'linear-RGB' em vez do mais comum espaço de cor não-linear 'sRGB'. Cautela é aconselhada. Ambos os pacotes podem coexistir, e já se soube que eu uso uma implementação PbmPlus/NetPBM para algumas coisas, em vez do ImageMagick. Tipicamente ao usar um processamento de imagem específico de baixo nível, ou criando scripts usando arrays de valores armazenados em uma forma de imagem. Os dois pacotes funcionam bem juntos, e recomendo que ambos sejam instalados e usados para trabalho sério de imagem. | _Eu fui na verdade quem fez o lançamento vital de patch de 1995 do NetPBM, durante uma época em que pouco trabalho estava sendo feito naquele software. Por causa disso, tenho um bom entendimento do software PbmPlus e seu formato de arquivo de imagem simples.
Desde então, foi redesenvolvido várias vezes por pessoas diferentes, e finalmente parece ter se tornado um projeto de código aberto adequado. Os vários programas parecem estar amadurecendo e começando a funcionar melhor juntos.
No entanto, seus principais problemas: a falta de metadados e a complexidade; permanecem. Mas sua simplicidade como formato de arquivo é sua maior vantagem, tornando-o ideal para manipulação de imagem e dados de muito baixo nível.
_
---|---
TIFF
O formato TIFF é o formato proprietário do PhotoShop. No entanto, ele é tão
inchado de recursos, e foi modificado por praticamente todo aplicativo
que se importou em usá-lo, que nenhum programa, nem mesmo o photoshop, consegue lidar com TODAS
suas variações. O Photoshop, no entanto, tem a melhor chance de lê-lo.
Eu me manteria longe do formato de arquivo de imagem TIFF, a menos que você esteja
especificamente trabalhando com photoshop, ou o aplicativo não aceite nenhum outro
formato de arquivo de imagem melhor definido.
Eu não uso o formato de arquivo de imagem TIFF, nem o Photoshop. Se você usar este formato
com o IM extensivamente, talvez você gostaria de me enviar suas descobertas,
para incluir aqui. Dessa forma, você pode ajudar seus colegas usuários de TIFF.
Se um pacote de software específico pode ler um TIFF, tudo o que você pode fazer é tentar
e ver. Ou seja, esse é o problema com este formato.
TIFF e Densidade (resolução) no photoshop...
Veja [Photoshop e Densidade](basics.html#density_photoshop)
para os detalhes e soluções para este problema
Conversão de JPEG para TIFF...
magick image.jpg image.tif
Isso ou salvará a imagem dentro do arquivo TIFF usando compressão JPEG
(que foi herdada da entrada JPEG). Ou dará um erro como...
Error: "JPEG compression support not configured"
Isso é causado pela biblioteca TIFF não incluir suporte à compressão JPEG.
De qualquer forma ISSO É RUIM.
Você pode contornar este problema mudando a configuração para usar um
algoritmo de compressão diferente:
magick image.jpg -compress zip image.tif
magick image.jpg -compress lzw image.tif
magick image.jpg +compress image.tif
AVISO: -compress Group4 com um TIFF funciona, mas SOMENTE se você remover todos os
pixels transparentes e semitransparentes da imagem. Tipicamente você pode
garantir que isso seja feito da mesma forma que nas imagens JPEG acima, usando
-background {color} -alpha remove
Veja [Removendo Transparência de Imagens](masking.html#remove)
logo antes do salvamento final (o primeiro só funciona para imagens individuais).
Arquivos TIFF (e MIFF) de precisão de ponto flutuante (Adicionado no IM v6.2.6-5)...
Isso é especialmente bom para o processamento de imagem HDRI (que usa ponto flutuante
dentro do próprio IM)
Para precisão simples (float) defina...
-depth 32 -define quantum:format=floating-point
Para precisão dupla (doubles) defina...
-depth 64 -define quantum:format=floating-point
Imagens TIFF de 14 bits...
magick logo: -sharpen 0x1 -depth 14 logo.tif
tiffinfo logo.tif
Image Width: 640 Image Length: 480
Resolution: 72, 72 (unitless)
Bits/Sample: 14
Compression Scheme: LZW
Photometric Interpretation: RGB color
FillOrder: msb-to-lsb
Orientation: row 0 top, col 0 lhs
Samples/Pixel: 3
Rows/Strip: 2
Planar Configuration: single image plane
DocumentName: logo.tif
Software: ImageMagick 6.2.8 07/27/06 Q16 https://imagemagick.org
Imagens TIFF de 12 bits...
Para converter imagens TIFF de 16 bits para 12 bits:
magick image.tif -depth 12 image-12.tif
Imagens puramente em preto e branco...
magick image ... -type truecolor -type bilevel image.tiff
Resulta em imagens normais e o menor tamanho de arquivo, e a
manipulação correta de preto/branco no Photoshop, Microsoft Windows Picture and Fax
Viewer.
[Discussão TIFF](https://magick.imagemagick.org/viewtopic.php?p=51723),
_[RQuadling](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=7913)_.
Endianness e fill-order
A ordem na qual os valores de dados TIFF são armazenados é controlada por
-endien Ordem global dos bytes
-define tiff:endian Endianness do contêiner do formato Tiff
-define tiff:fill-order Ordem de bits dentro de um byte
Cada um recebe um valor de MSB (padrão) ou LSB, no entanto
o "tiff:fill-order" será definido com o valor de "tiff:endian"
se esse estiver definido, mas não a partir do valor global de endian.
A propriedade "tiff:endian" é a endianness do contêiner da imagem. A
propriedade "-endian" é a endianness dos pixels da imagem. Elas podem diferir.
Salvar um formato de arquivo TIFF com apenas uma linha por strip
-define tiff:rows-per-strip=1.
Para salvar mais linhas por strip, aumente o número
-define tiff:rows-per-strip=8
Você também pode especificar a ordem 'endian' para inteiros binários no formato
-endian MSB -endian LSB
Para imagens TIFF menores (além de por compressão, você também pode tentar
usar opções e configurações como -depth 8 para reduzir a qualidade de cor
ou -alpha off para remover o canal alpha ou de transparência da imagem.
O IM salvará uma imagem em escala de cinza como um TIFF em escala de cinza, se nenhuma cor
que não seja em escala de cinza estiver presente. Você pode forçá-lo a salvar como não-escala de cinza com
-depth 8 -type TrueColor
Adicionado no IM 6.6.4-3
Permite que você defina os metadados (propriedade) "Software Creation:"
para algo diferente de "Image Magick 6.**"
-set tiff:software "My Software"
Windows Picture and Fax Viewer, Windows Explorer
Estes só conseguem exibir TIFFs que têm certos valores de Photometric
Interpretation, como RGB. Opções do IM...
-compress LZW -type TrueColor
alternar a interpretação fotométrica (Adicionado no IM 6.3.2-10)
-define quantum:polarity=min-is-black
-define quantum:polarity=min-is-white
TIFF de Múltiplas Páginas
Se você quiser dividir um tiff de múltiplas páginas em páginas separadas, o IM pode ter
problemas, pois ele ainda usará muita memória para manter páginas anteriores
mesmo que você use um comando como...
magick "a.tif[i]" b%03d.tif
Isso pode ser considerado um bug, ou talvez uma melhoria futura.
A melhor solução pode ser o programa não-IM "tiffsplit".
TIFF e perfis EXIF
Cristy relatou: A biblioteca delegate libtiff suporta o perfil EXIF
mas era não confiável e causava falhas com muita frequência, então comentamos
a chamada.
Para obter os atributos EXIF, tente isto.
magick identify -verbose -define tiff:exif=true image.tif
O formato TIFF pode ter uma máscara de bitmap na forma de um clip path, que pode ser habilitado usando o operador "[-clip](https://imagemagick.org/command-line-options/#clip)". Você pode usar essa máscara de 'clip' para mascarar sua imagem com esse caminho usando...
magick image_clip.tif -clip \
...do_various_operations... \
+clip-mask image_masked.png
Veja Máscaras de Escrita ou Recorte para mais detalhes.
BMP, Windows Bitmap
O formato de imagem de ícone da área de trabalho do Windows BMP (abreviação de bit-mapped) é um formato de imagem
muito hostil e provavelmente deveria ser evitado se possível.
O ImageMagick suporta imagens BMP de 8, 24 e 32 bits.
Adicione -colors 256 ao final da sua linha de comando (antes do nome do arquivo
de imagem de saída) para criar uma imagem BMP de 8 bits com mapa de cores em vez de um formato BMP
de 24 bits. Cores extras podem ser adicionadas às imagens após realizar operações
como rotações e redimensionamento. Veja Quantização de Cor para mais informações sobre -color.
A presença de qualquer transparência controla se ele usa um formato BMP de 24 (RGB) ou 32
bits (RGBA). Você pode usar "-alpha off" para desativar a transparência
em uma imagem.
Se todas as cores forem em escala de cinza, uma imagem em escala de cinza 'directcolor' é gerada.
Eu acho que -type truecolor impedirá esse comportamento.
Se você tem um programa mais antigo que não consegue ler as imagens BMP4 padrão escritas pelo
ImageMagick, (por exemplo uma Imagem de Fundo do Windows), você pode forçar a
geração de uma imagem em formato BMP3 usando...
magick image BMP3:image.bmp
Este formato não deve ter transparência e deve ser uma 'imagem imprimível',
o que quer que isso signifique. Em outras palavras, compatível com o 'Windows'.
No entanto, se um arquivo de entrada PNG foi usado e ele contém um chunk gAMA e cHRM
(informação de gama e cromaticidade), qualquer um dos quais força o "magick" a
escrever um BMP4. Para obter um BMP3 você precisa se livrar dessa informação. Uma forma
pode ser canalizar a imagem por um formato de arquivo de imagem mínimo 'apenas dados de imagem'
como PPM e então re-salvar como BMP3. Confuso, mas deve funcionar.
magick image.png ppm:- | magick - BMP3:image.bpm
O IM não consegue produzir BMPs em níveis de profundidade diferentes de 8. No entanto, você pode
usar o conjunto de processamento de imagem NetPBM para fazer a conversão final para outros níveis
de profundidade (Isto requer pelo menos uma versão Q16 do IM)...
magick image -alpha off -colors 16 ppm:- |\
pnmdepth 4 | ppm2bmp > image.bmp
Limitações de formato....
O cabeçalho para um formato BMP2: só permite a descrição da largura,
altura e profundidade de bits (bits por pixel) de uma imagem. A profundidade de bits pode ser uma de
1, 4, 8 ou 24.
Para comparação, o formato bmp3: permite profundidades de bits de 0, 1, 4, 8 ,16, 24 e
32 e tem campos extras que especificam a resolução x e y (em pixels por metro)
e a compressão dos dados da imagem.
ICO
Para criar uma imagem no formato ICO com múltiplas resoluções, basta criar todos
os tamanhos de imagem que você precisa e gravá-los todos no mesmo arquivo ICO.
magick icon-16.bmp icon-32.bmp icon-64.bmp \
icon-128.bmp icon-256.bmp myicon.ico
Atualização
magick icon-256.png \
-define icon:auto-resize="256,128,96,64,48,32,16" \
myicon.ico
Agora você pode adicionar isto às suas páginas web usando
<LINK REL="shortcut icon" HREF="myicon.ico">
No entanto, muitos navegadores web agora aceitam a maioria dos formatos de imagem, não apenas o
formato ICO.
Formatos de Imagem RAW de Câmera (CRW,CR2,NEF,X3F,etc.)
A maioria das câmeras digitais, com exceção do sensor Sigma Foveon e algumas câmeras Sony, magick a imagem produzida pela lente em dados digitais usando milhões de sensores que detectam o brilho de uma cor específica, Vermelho, Verde ou Azul. Para que a câmera responda à cor aproximadamente da mesma forma que o olho humano, há o dobro de sensores verdes em relação aos vermelhos ou azuis porque nosso olho é muito mais sensível à luz verde. Os sensores são organizados no que é chamado de matriz de Bayer. Para uma descrição e diagramas desse arranjo veja, por exemplo, Understanding Digital Camera Sensors. A conversão dos dados de uma matriz de Bayer para os mais familiares pixels RGB requer um processo chamado de demosaicing. Uma vez que esta operação tenha sido feita ainda não temos uma imagem digna de ser exibida. Mesmo com os pixels verdes extras, o sensor da câmera ainda não percebe a cor da maneira que nós percebemos. Se você pegar um pedaço de papel branco e olhar para ele sob luz solar intensa e então entrar em casa e olhar para ele sob uma luz fluorescente, ele parecerá branco em ambas as condições. Mas se você fotografar a folha de papel sob essas mesmas condições usando as configurações padrão da câmera, o papel mostrará cores ligeiramente diferentes quando exibido em uma tela. A razão é que, embora a parte de trás de nossas retinas "veja" a mesma luz refletida no papel que a câmera vê, nosso cérebro interpretará essa luz para nós e perceberemos o papel como branco. A câmera simplesmente mede a quantidade de luz vermelha, verde e azul refletindo no papel e sob uma luz fluorescente haverá mais luz azul do que há sob luz solar, então o papel naquela imagem parecerá mais azulado do que aquele tirado sob luz solar. Para produzir imagens que ambas mostrem uma folha de papel branca é necessário que elas tenham seu "balanço de branco", também referido como balanço de cinza ou balanço de cor. Para mais sobre balanço de branco veja Understanding White Balance Ainda há outros aspectos do arquivo raw que devem ser feitos, como definir um gamma correto, mas sem entrar em mais detalhes está claro que o arquivo raw precisa de muito processamento antes que possa se tornar uma imagem que possamos visualizar em um monitor. Os arquivos raw de câmera são frequentemente referidos como negativos digitais. Se você tira uma foto e faz a câmera gerar uma imagem JPG, ela terá feito o demosaicing e todos os outros ajustes. Mas se, por exemplo, você esqueceu de definir o balanço de branco correto na câmera antes de tirar a foto, você realmente não pode fazer muito com o JPG para corrigir a situação porque muita informação sobre a imagem original foi perdida. Se, por outro lado, você tivesse produzido um arquivo raw da câmera em vez de um JPG, durante a conversão do raw você pode escolher uma configuração específica de balanço de branco junto com outros parâmetros e se a imagem resultante não parecer correta você pode voltar, mudar as configurações e magick novamente até que pareça correta. Isto é semelhante à capacidade de produzir mais cópias a partir de negativos de filme. Sem o negativo de filme você não conseguiria obter uma ampliação 8x10 de um dos instantâneos 4x6 que você recebe quando o filme é revelado pela primeira vez. Embora o ImageMagick possa lidar com uma grande variedade de formatos diferentes, ele não 'sabe' como magick os arquivos raw de câmera, então o IM usa o programa "[dcraw](http://www.cybercom.net/~dcoffin/dcraw/)" como um programa delegado para magick o arquivo raw em um formato que ele entenda, seja um TIFF (com a flag '-T') ou PNM. Note que ele é projetado para imagens raw de câmera, e não aquelas de, por exemplo, um scanner. O programa "[dcraw](http://www.cybercom.net/~dcoffin/dcraw/)" pode lidar com um grande número de formatos raw diferentes, incluindo aqueles de câmeras fabricadas por Canon, Fuji, Kodak, Nikon e Sony. Você pode determinar se o "dcraw" reconhecerá seus arquivos raw pedindo a ele para identificar uma amostra. Por exemplo, o comando:
dcraw -i CRW_9641.CRW
Que retorna...
CRW_9641.CRW is a Canon EOS 10D image.
Quando o IM chama o dcraw para fazer uma conversão, usando o delegado (liste usando "-list delegate"), especifica duas flags que afetam o processamento de imagem:
dcraw -w -4 -O output_file input_file
A flag '-w' significa que o dcraw usará a informação de balanço de branco no arquivo raw se ela puder ser encontrada. Se a informação não puder ser encontrada, o dcraw usará uma média da imagem inteira como base para o balanço de branco. A flag '-4' significa que o dcraw apenas fará o de-mosaic e o balanço de branco da foto raw e produzirá o resultado como uma imagem linear de 16 bits (48 bits por pixel), adequada para a versão Q16 padrão do IM. Como '-w' e '-4' são as únicas duas flags de processamento de imagem especificadas, há alguns padrões que o dcraw usará. O espaço de cor de saída será sRGB e nenhum perfilamento ICC é feito (no meu sistema, o dcraw foi compilado sem a biblioteca LCMS, então ele não pode fazer perfilamento). O fato de que a flag '-4' está definida significa que muitas etapas de processamento foram omitidas, incluindo ajuste de níveis e correção de gamma, e então a imagem resultante parecerá escura. A intenção é que o usuário vá processar a imagem com um editor de imagens como "Photoshop" ou "Paint Shop Pro", ou até mesmo "ImageMagick" e fazer seu próprio ajuste de níveis, gamma e assim por diante. Neste caso, a imagem deve ser produzida em um formato que suporta 16 bits por cor. (Por exemplo TIFF). Note que só porque o dcraw produz um arquivo de 16 bits não significa que todos os 16 bits contenham dados úteis. Por exemplo, uma imagem raw de uma câmera SLR digital Canon 10D tem 10 bits por cor. Câmeras mais recentes da Canon e de outros fabricantes têm 14 bits por cor. Se você quiser suas fotos raw convertidas completamente você terá que remover a flag '-4' para que o dcraw faça o de-mosaicing, balanço de branco, brilho e correção de gamma e assim por diante. Neste caso o dcraw produz um arquivo de 8 bits (24 bits por pixel). Se você for fazer processamento adicional desta imagem seria melhor produzi-la como um PNG e evitar os artefatos de compressão JPEG. O formato JPEG só deve ser usado como uma etapa final para uso real. Na verdade, é sempre uma boa ideia usar um formato sem perdas como o PNG (ou o formato interno do IM, MIFF) para etapas intermediárias no processamento de imagem. Um Delegado DCRaw especial pode ser adicionado, que permitirá controlar como você lê os formatos de imagem raw de câmera. Para mais informações veja o DCRaw WebSite, e também o DCRaw Tutorial Website que tem algumas informações sobre muitas das flags opcionais do dcraw e incluindo histogramas de imagens raw usando várias flags. Veja também DCRaw by Example. As notas acima foram primeiramente extraídas de um Tópico do Fórum do IM Converting RAW images, por jhfry , com grandes reescritas por el_supremo.
Filmes MPEG, M2V e AVI
O IM não é muito eficiente em criar filmes. Ele fará o trabalho, embora
requeira o programa externo "mpeg2encode" para fazer grande parte do trabalho pesado.
O problema é que o IM não é projetado para lidar com vídeo, mas com imagens estáticas ou
pequenas sequências de imagens. Isto é, não é dizer que ele não pode fazê-lo, mas que esse não é
seu objetivo. Em particular, ele geralmente lê todas as imagens para a memória
e as processa de lá. Para um vídeo grande ou longo isso não é muito
eficiente.
Para processamento de uma pequena sequência de quadros, no entanto, ele realmente não pode ser
superado. Na verdade, praticamente todo programa de manipulação de vídeo do Linux usa
o ImageMagick para gerar títulos, mudanças de cena sofisticadas e outros efeitos para
completar o desenvolvimento de pós-processamento de um desenvolvimento de vídeo maior. O
processo, no entanto, é mantido em pequenas sequências de vídeo.
No entanto, vamos dar uma olhada no que o IM pode fazer.
**Quadros para Vídeo**
Há alguns relatos de que, a menos que as imagens estejam na proporção de aspecto correta,
isto falhará em players mpeg mais antigos, use a extensão MPEG II
(m2v:) em vez disso.
Use também m2v para evitar a pixelização de compressão pesada que pode ocorrer
usando...
magick *.jpg glacier.mpg
Ex. em vez disso use...
magick *.jpg m2v:glacier.mpg
Note que você pode precisar de muito espaço temporário para fazer animações grandes
Você pode especificar um diretório diferente do /tmp normal usando...
setenv MAGICK_TMPDIR /data
magick -limit memory 0 -limit map 0 *.jpg image.m2v
Alternativas...
Para converter imagens PNG em streams de Vídeo MPEG2, em vez de MNG Multi
PNG-files, use a seguinte delegação...
png2yuv -j file%08d.png -I p -f 25 -b 1 | \
mpeg2enc -f 3 -q 3 -b 5000 -o out.m2v
Para mais informações veja [mjpeg.sf.net](http://mjpeg.sf.net/)
Os fóruns do IM relataram resultados decentes com um projeto de código aberto chamado "[ffmpeg](http://ffmpeg.org/)", que parece ser uma instalação de pacote
linux bastante padrão.
ffmpeg -f image2 -i %03d.jpg -vcodec mjpeg -y anim.mpg
Extraindo um MVG com um fundo transparente
magick -background none -size 320x240 sample.mvg out.png
Michael Lenh escreveu...
Eu finalmente consegui criar um vídeo muito bacana usando mplayer
mencoder "mf://data/p*.png" -mf fps=40 -o particle.avi -ovc lavc
Você pode ver os resultados em...
http://www.mathematik.uni-ulm.de/~lehn/particle.avi
http://www.mathematik.uni-ulm.de/~lehn/temperature.avi
[mabu](https://magick.imagemagick.org/memberlist.php?mode=viewprofile&u=19117) em uma [Discussão do Fórum do IM](https://magick.imagemagick.org/viewtopic.php?f=1&t=18724) disse para
"_USAR O MENCODER, uau, é tipo 1000 vezes mais rápido e realmente FUNCIONA_ "...
mencoder -nosound mf://*.jpg -mf w=800:h=371:type=jpg:fps=15 -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2160000:mbd=2:keyint=132:v4mv:vqmin=3:lumi_mask=0.07:dark_mask=0.2:mpeg_quant:scplx_mask=0.1:tcplx_mask=0.1:naq -o output.mpg
Provavelmente tem opções extras que eu não preciso, mas faz um belo time-lapse
a partir de arquivos .jpg.
Dean S. Messing usa transcode...
find . -type f -name '*.png' | sort > filelist
transcode -x imlist,null\
--use_rgb\
-y raw,null\
-f 60\
-i filelist\
-g 4096x2160 \
-j 540,1024,540,1024\
-o video.avi\
-H 0
Você pode omitir -j (janela de recorte) se quiser. -g é o tamanho de saída.
Wolfgang Hugemann sugere uma nova alternativa conhecida como 'VirtualDub' sob
o Windows Vista, que permitirá rodar um vídeo, ou magick diretamente de
uma pasta de quadros de imagem.
AVISO: o "mplayer" aparentemente não gosta de arquivo mpeg com
apenas um quadro. O "ffplay" no entanto parece não ter problemas.
**Vídeo para Quadros**
Tanto o "[mplayer](http://www.mplayerhq.hu/)" quanto o
"mencode" são mais eficientes em converter vídeo em uma série
de quadros do que o IM é. Além disso, ele pode lidar com praticamente qualquer codec de vídeo
(e áudio) disponível.
Por exemplo, para capturar 5 quadros a partir de 1 minuto e meio de um vídeo, escalados para
320x240, você pode usar...
mplayer file.mov -vf scale=320x240 -ss 01:30 -ao null \
-vo png:z=3 -frames 5
Outras alternativas incluem a biblioteca de código aberto "[ffmpeg](http://ffmpeg.org/)", embora isso também seja parte do
tratamento do "[mplayer](http://www.mplayerhq.hu/)".
MNG, Multiple-image Network Graphics
_Contribuído porBarry Loo da discussão Example Ming Animation._O MNG (pronuncia-se ming) é um formato aberto baseado em PNG, e fornece uma alternativa de bitmap animado ao GIF e outros. Ele permite transparência (tanto semi quanto completa), compressão (tanto com perdas quanto sem perdas), e profundidade de cor de até 32 bits. A maior profundidade de cor é o que realmente distingue este formato dos outros. O GIF suporta apenas até 256 cores no total, o que é suficiente para muitos gráficos; no entanto, fotografias e gradientes sofrerão. A maioria das opções de animação que podem ser usadas na criação de animações GIF também pode ser usada para criar MNGs. |
magick -size 101x101 radial-gradient: \
\( -clone 0 -level 00,100% +level-colors ,#F00 \) \
\( -clone 0 -level 10,100% +level-colors ,#F12 \) \
\( -clone 0 -level 20,100% +level-colors ,#F24 \) \
\( -clone 0 -level 30,100% +level-colors ,#F36 \) \
\( -clone 0 -level 40,100% +level-colors ,#F46 \) \
-delete 0 -duplicate 1,-2-1 -set delay 1x30 -loop 0 pulsing.mng
O comando acima gera uma imagem radial-gradient, que é então clonada e ajustada para criar um pulso de vermelho para vermelho-laranja mais brilhante. Isto é então duplicado para criar um Patrol Cycle invertido antes de criar uma animação MNG de 30 segundos em loop. Infelizmente, a maioria dos navegadores web atualmente não suporta MNG, e muitos players de vídeo mostram apenas uma passagem pela animação em loop. Se você clicar no quadro de imagem ausente acima, você pode baixar a animação e visualizá-la usando o Comando Animate do IM. Para mais informações sobre o formato MNG, visite MNG Web Site.
DPX, Digital Picture Exchange Format
Este formato é usado na indústria de Cinema e Efeitos que faz uso particular das extensas informações de cabeçalho e da flexibilidade do formato em ser capaz de lidar com alto alcance dinâmico e valores de cor logarítmicos em uma variedade de profundidades de bits usando descrições de pixel RGB ou YCbCr. Ele é baseado em, mas em grande parte substitui, o formato Cineon da Kodak, que tem um cabeçalho mais específico para filme. Um exemplo de seu uso seria ao escanear filme para uso em pós-produção. Cada quadro seria armazenado como um arquivo .dpx individual variando de 2k (2048 pixels de largura) a 8k (8192 pixels de largura - para quadros IMAX) em qualquer coisa entre 8 e 64 bits por componente de cor. Uma sequência destes poderia então ser processada usando software de composição, alterando a cor ou adicionando efeitos visuais. Uma vez completos, eles poderiam então ser gravados digitalmente em fita ou projetados de volta em filme. Os valores de cor de cada pixel são frequentemente armazenados logaritmicamente (particularmente se a sequência se destina a ser transferida de volta para filme) o que reflete mais naturalmente a densidade de como a informação de cor é armazenada na emulsão do filme original. Quando visualizados sem alteração, os arquivos logarítmicos parecem ter contraste muito baixo, e então requerem uma 'tabela de consulta' (look up table) para traduzir a imagem logarítmica para algo que se assemelhe ao que você poderia ver se a imagem fosse transferida de volta para filme e projetada em um cinema. Além de tornar a imagem linear (como a maioria das imagens típicas de computador) e ajustar o nível de gamma, esta tabela define onde ficam os pontos de preto e branco. Para uma imagem logarítmica de 10 bits onde cada valor de componente de cor varia de 0 a 1023 os pontos de preto e branco são normalmente definidos em 95 para preto e 685 para branco. O que isso significa é que o arquivo logarítmico armazena valores de cor que são mais claros do que aquilo que a versão linear exibirá como branco puro e mais escuros do que aquilo que ela exibirá como preto puro. Esta informação extra portanto permanece disponível para um artista de efeitos que possa desejar alterar o brilho da imagem depois que ela tiver sido armazenada como um arquivo dpx. Como exemplo, se esta informação tivesse sido perdida, reduzir o brilho de uma imagem uniformemente resultaria em realces ficando mais escuros, ao passo que com esta informação extra os realces, em vez disso, reduzem de tamanho e começam a mostrar detalhes que anteriormente eram muito brilhantes para serem vistos. O último caso é muito mais próximo do que acontece no mundo real. O cabeçalho pode conter dados específicos de Cinema e/ou Televisão relacionados a uma produção. Por exemplo, o cabeçalho de televisão pode conter um time code SMPTE para que tomadas exportadas como uma sequência dpx a partir da edição de uma produção possam ser facilmente substituídas uma vez que quaisquer efeitos tenham sido adicionados. O cabeçalho de filme contém informações sobre o rolo de filme do qual os quadros se originaram e várias configurações de câmera que foram usadas durante a filmagem. Todos esses detalhes então permanecerão com as imagens à medida que elas são passadas entre empresas de pós-produção.
Adicionando um time code a arquivos DPX
Você pode adicionar um time code a qualquer arquivo dpx usando o seguinte:
magick -define dpx:television.time.code=10000215 \
originalFile.00001.dpx alteredFile.00001.dpx
Realizar este comando para cada um de vários milhares de arquivos que formam uma sequência de um filme ou animação claramente levaria muito tempo. Um script simples pode ser usado com o ImageMagick para incrementar automaticamente o time code para cada quadro em uma sequência. Por exemplo, veja o Script Perl dpx_timecode.pl.
Uma cópia do acima foi adicionada à documentação principal do IM em Introduction to Motion Picture Formats. O acima é cortesia de Seth Dubieniec
**Notas Extras (não formatadas)...**
Adicionar -depth 10 faz o IM produzir um arquivo DPX de 10 bits.
-- James Fancher
Se você quiser definir o gamma, por exemplo, na imagem DPX de saída...
-define dpx:television.gamma=1.7
O espaço de cor da imagem DPX é definido pelo descritor de elemento de imagem e
pela característica de transferência. Se a característica de transferência for
PrintingDensityColorimetric definimos o espaço de cor para LogColorspace. Apenas se
o espaço de cor for Log aplicamos o gamma e os pontos de preto/branco para converter
para o espaço de cor RGB. É possível que o programa que você está usando não esteja
em conformidade com o padrão SMPTE ou que o ImageMagick não esteja interpretando o
padrão corretamente. Poste uma URL para suas duas imagens DPX e nós as baixaremos e
tentaremos determinar se o ImageMagick tem um bug ou se o programa que você está usando está
com bug.
O seguinte funcionará com o ImageMagick 6.3.8-3
magick -colorspace log AfterEffectsFile.dpx -set gamma 0.5 \
-set reference-black 95 -set reference-white 685 image.jpg
Alternativamente, dê uma olhada na documentação SMTPE
-- Cristy
Você pode adicionar dados de texto de usuário ao arquivo dpx usando
magick image.dpx -set dpx:userdata "some text" new.dpx
-- Cristy
PSD
Um arquivo de imagem PSD é o formato de arquivo de imagem de trabalho do Photoshop, assim como o XCF é o formato de arquivo de trabalho do GIMP, e o MIFF é o próprio formato de arquivo de trabalho do ImageMagick. Eles geralmente contêm múltiplas imagens, sendo a primeira imagem uma fusão tudo-em-um da imagem de trabalho atual. Isso o torna útil para ver a imagem de trabalho como ela está atualmente e é tipicamente usado para 'thumbnailing'. Todas as outras imagens no formato de arquivo de múltiplas imagens são as imagens que são usadas para gerar aquela primeira imagem combinada. Isto é, as imagens individuais de camada de trabalho nas quais o usuário estava trabalhando no momento em que foi salvo. Então se você só quer a imagem 'final' eu sugiro que você acrescente um " '[0]' " ao nome do arquivo de entrada para descartar as imagens de trabalho, e usar apenas a primeira imagem tudo-em-um. No entanto, se você planeja trabalhar com as imagens de camada individuais então use " '[1--1]' " para pular a primeira imagem. Se nenhuma imagem de camada extra for encontrada, então a primeira imagem será retornada em vez disso. Eu NÃO recomendo usar "-delete 0" pois isso retornará nenhuma imagem se nenhuma imagem de camada seguir aquela primeira imagem. Notas extras... Se você puder fornecer mais informações ou quiser enviar um resumo do uso do IM para este formato, então por favor faça...
Para PSD com uma imagem CMYK você pode precisar fazer o IM usar o
perfil correto ao converter (certifique-se de que seu IM foi instalado com a biblioteca delegada
LCMS) ....
magick Test_CMYK.psd -strip -profile USWebCoatedSWOP.icc \
-profile sRGB.icc Test_RGB.png
Veja [Profiles](#profiles) acima para mais informações.
Se uma imagem PSD contiver uma imagem de 'preview'. Esta imagem é retornada como a
última imagem de uma leitura de duas imagens.
Para garantir que o IM nunca leia a última imagem use...
magick test.psd[0--2] -flatten test.jpg
Isto é, leia todas as imagens, exceto a última. Mas sempre leia a primeira.
Isto não pode ser feito depois da leitura usando um "-delete".
WMF
Outro formato vetorial frequentemente usado para clipart escalável usado pelo conjunto de programas Microsoft Office. A entrada pode ser escalada mudando o "[-density](https://imagemagick.org/command-line-options/#density)" antes de ler a imagem. Veja também Vector Image Formats.
Animações Flash (SWF)
Animações Flash atualmente não são suportadas pelo IM. Mas apenas por completude, Scott Bicknell relata que o utilitário SWF Tool "swfextract" Ele pode extrair quadros jpeg ou png de uma animação flash. Wolfgang Hugemann também acha que a ferramenta freeware do Windows "IrfanView" pode ser capaz de fazer isto também. Parece um bom candidato a delegado para mim.
Conversão de Página Web em Imagem (HTML)
Se o IM carregar um HTML ele procurará por um html2ps para magick o html em postscript que ele pode então renderizar como uma imagem. Isto não funciona muito bem, mas funciona. Usar um navegador web completo é um método muito melhor pois ele é projetado para fazer a tarefa da melhor forma possível. O método mais simples de usar um navegador é apenas carregar a página em um navegador e então tirar uma captura de tela dela. Isto obtém uma imagem perfeita da página, mas limitada ao tamanho da janela do navegador. Outra variação é fazer o navegador produzir a página como postscript em vez de fazer o IM magick. Isto deve paginar o site em páginas menores de forma bastante agradável. No LINUX você pode iniciar um servidor de Display X virtual que seja grande o suficiente para rodar um navegador que mostre o site inteiro. Isto pode ser um display MUITO alto. O navegador é então executado nele e configurado para preencher o display inteiro. O site é carregado e novamente captura uma captura de tela. Eu vi um script que pode até automatizar todo esse processo complexo. No entanto, você pode acabar com uma imagem MUITO longa. Também é difícil saber exatamente quão grande fazer o display. Basicamente NÃO é fácil e as melhores soluções usam o IM apenas para o processamento de imagem final, não para a geração da imagem do html.
Formato de Impressão PCL
O PCL do IM é, por padrão, PCL versão 6. Para a versão 5 você precisa fazer magick da sua imagem para preto e branco. Por exemplo...
magick image.png -monochrome image.pcl
Kodak PhotoCD ou ProPhotoCD (PCD)
O arquivo Kodak PhotoCD é um formato de arquivo de imagem multi-resolução. Isto é, cada arquivo contém a mesma imagem em 6 tamanhos diferentes formando algo conhecido como uma 'imagem em pirâmide'. A primeira imagem no arquivo é a resolução mais baixa (menor tamanho) e a última a resolução mais alta (maior tamanho em 3072×2048 pixels). Como os usuários tipicamente querem a imagem de maior resolução para processamento, a maneira de fazer magick de uma imagem PCD para algum outro formato como JPG é capturar a sexta (ou índice 5) do arquivo de imagem. Por exemplo...
magick -colorspace RGB image.pcd[5] image.jpg
A opção "-colorspace RGB" é necessária para obter as cores corretas. Informação cortesia de Wolfgang Hugemann
Dados RGB Raw e Gray
O Imagemagick tem alguns formatos de arquivo para lidar com dados de imagem raw, especificamente "RGB:" e "GRAY:". Além de fornecer configurações que definem esses dados. Por exemplo, para produzir dados RGB raw...
magick image.jpg -depth 8 image.rgb
A configuração "[-depth](https://imagemagick.org/command-line-options/#depth)" especifica o tamanho dos inteiros gravados (e posteriormente lidos). Neste caso valores de 8 bits com 3 bytes por pixel para RGB, (uma imagem de 24 bits). Especificar uma profundidade apropriada é sempre recomendado para lidar com dados de imagem raw. Um "[-depth](https://imagemagick.org/command-line-options/#depth)" de 16 bits produzirá 2 bytes por valor, caso em que você também pode precisar especificar o "[-endian](https://imagemagick.org/command-line-options/#endian)" ou ordem de bytes, sendo ou 'MSB' (byte mais significativo primeiro), ou 'LSB' (byte menos significativo primeiro, o padrão). Note que rgb é puramente os dados da imagem, ele nem sequer contém a largura e a altura da imagem! Algumas aplicações 'assumem' que os dados têm um tamanho específico, então você pode precisar usar o IM para garantir que os dados tenham esse tamanho. Por exemplo, isto redimensiona e preenche a imagem para garantir que ela tenha 512x512 pixels de tamanho.
magick image.jpg -resize \>512x512 \
-background black -gravity center -extent 512x512 \
-depth 8 image.rgb
Ao ler dados RGB (ou GRAY) raw no ImageMagick você precisará especificar quão grande é a imagem. Por exemplo..
magick -size 512x512 -depth 8 image.rgb image.png
Isto definirá exatamente quanto dados o Imagemagick lerá. Às vezes os dados raw podem ter alguma informação de cabeçalho extra anexada. Para permitir que o IM pule essa informação você pode especificar um 'byte_offset' na configuração "[-size](https://imagemagick.org/command-line-options/#size)". Por exemplo, pular um cabeçalho de 48 bytes...
magick -size 512x512+48 -depth 8 image.rgb image.png
Esta é a única vez que eu conheço em que o IM fará uso de um terceiro número na configuração "[-size](https://imagemagick.org/command-line-options/#size)". Para mais exemplos de uso de dados de imagem raw (escala de cinza) veja o tópico do fórum de Discussão do IM How to convert raw image to compressed tif?.
Dados de Ponto Flutuante
Você também pode ler (e gravar) RGB usando números de ponto flutuante normalizados.
Isto, no entanto, requer o uso de configurações especiais -define de coder.
Veja os formatos de arquivo de ponto flutuante HDRI
https://usage.imagemagick.org/basics/#hdri_formats
Imagem RGB de ponto flutuante gerada usando Código C (HDRI)...
float red = 1.0f;
float green = 1.0f; /* appropriate data */
float blue = 1.0f;
/* for exach pixel in image... */
fwrite (&red, sizeof(float), 1, file);
fwrite (&green, sizeof(float), 1, file);
fwrite (&blue, sizeof(float), 1, file);
Opções de Leitura....
magick -size 200x100 -depth 32 -define quantum:format=floating-point
-define quantum:scale=65536.0 -endian lsb input.rgb
output.png
O quantum:format define ler números de ponto flutuante do arquivo.
Enquanto o -depth define o tamanho do ponto flutuante (32 = floats, 64 = doubles).
O quantum:scale define como escalar os números de ponto flutuante de
valores normalizados de 0.0 a 1.0 para os níveis de Qualidade de 16 bits em memória necessários
pela minha versão Q16 do IM.
![[IM Output]](../static/img/images/hand_point.gif)
![[IM Output]](../static/img/formats/hand_point.txt.gif)
![[IM Output]](../static/img/formats/hand_white.gif)
![[IM Output]](../static/img/formats/hand_white.txt.gif)
![[IM Output]](../static/img/formats/hand_flatten.gif)
![[IM Output]](../static/img/formats/hand_flatten.txt.gif)
![[IM Output]](../static/img/formats/hand_wheat.gif)
![[IM Output]](../static/img/formats/hand_wheat.txt.gif)
![[IM Output]](../static/img/formats/a_ordered_2x2.gif)
![[IM Output]](../static/img/formats/a_ordered_3x3.gif)
![[IM Output]](../static/img/formats/a_ordered_4x4.gif)
![[IM Output]](../static/img/formats/a_halftone_2.gif)
![[IM Output]](../static/img/formats/a_halftone_4.gif)
![[IM Output]](../static/img/formats/a_halftone_6.gif)
![[IM Output]](../static/img/formats/a_halftone_8.gif)
![[IM Output]](../static/img/formats/a_random_5x95.gif)
![[IM Output]](../static/img/formats/a_random_5x60.gif)
![[IM Output]](../static/img/formats/a_random_50x95.gif)
![[IM Output]](../static/img/formats/a_random_45x55.gif)
![[IM Output]](../static/img/formats/a_random_50x50.gif)
![[IM Output]](../static/img/formats/jpg_lossy_mag.gif)
![[IM Output]](../static/img/formats/jpg_lossy_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_100_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_80_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_50_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_20_tn.gif)
![[IM Output]](../static/img/formats/jpg_lossy_5_tn.gif)
![[IM Text]](../static/img/formats/jpg_ls_lossy.txt.gif)
![[IM Output]](../static/img/formats/a.jpg)
![[IM Output]](../static/img/formats/a_compress.txt.gif)
![[IM Output]](../static/img/formats/a_compress.png)
![[IM Output]](../static/img/formats/a_compress2.txt.gif)
![[IM Output]](../static/img/formats/a_compress2.png)
![[IM Text]](../static/img/formats/iptcData.pro.gif)
![[IM Text]](../static/img/formats/pgm_random_values.pgm.gif)
![[IM Text]](../static/img/formats/pgm_array.pgm.gif)
![[IM Text]](../static/img/formats/pbm_array.pbm.gif)
![[IM Text]](../static/img/formats/pgm_percent.pgm.gif)
![[IM Text]](../static/img/formats/pgm_percent_2.pgm.gif)
![[IM Text]](../static/img/formats/pgm_comment.pgm.gif)
![[IM Text]](../static/img/formats/pgm_comment_2.pgm.gif)