Converte imagem para PNG descompactado a partir da linha de comando

4

Eu tenho uma imagem PNG compactada compressed.png . Eu posso convertê-lo para um% PNG descompactadodecompressed.png usando o GIMP (salvando como PNG e definindo o nível de compressão para 0). Como isso pode ser feito na linha de comando (Linux)?

Eu me lembro de ter feito isso no passado usando Imagemagick convert , mas esqueci como. Eu tentei algumas coisas que achei que deveriam funcionar com base na documentação :

  • convert compressed.png -compress None decompressed.png
  • convert compressed.png +compress decompressed.png
  • convert compressed.png -quality 0 decompressed.png
  • convert compressed.png -quality 00 decompressed.png

acabou de escrever um PNG comprimido comum.

De que maneira: por que você deseja um PNG não compactado?

Alguns casos:

  • Você deseja oferecer suporte a diffs eficientes (binários) dos dados de imagem, enquanto ainda usa outros recursos do formato PNG (em oposição ao armazenamento de dados de imagem bruta ou BMP).
  • Você deseja compactar vários PNGs juntos em um arquivo tarball ou 7z, mas deseja continuar usando os recursos do PNG. Se as imagens forem suficientemente semelhantes, isso pode fornecer uma melhor taxa de compactação do que compactar individualmente.
  • Útil como tamanho de linha de base para testar otimizadores PNG.
por Mechanical snail 27.07.2012 / 23:49

3 respostas

3

O ImageMagick sempre comprimirá arquivos PNG. A pior compressão que você pode obter é usando:

convert -verbose -quality 01 input.png output.png

mas depende do conteúdo da imagem (o 0 usa a compressão Huffman, que por vezes é melhor que a zlib).

Você pode experimentar outras ferramentas, como o pngcrush ( link ) para desativar a compactação:

pngcrush -force -m 1 -l 0 input.png output.png

que cria um arquivo do mesmo tamanho que o GIMP cria ao usar o Compression Level 0 (alguns bytes mais ou menos).

Alguns tamanhos de exemplo (para um PNG fotográfico, 1600x1200):

  • original: 1.693.848 bytes.
  • após IM: 2.435.983 bytes.
  • após o GIMP: 5.770.587 bytes.
  • após o pngcrush: 5.802.254 bytes.
por 02.08.2012 / 11:29
5

Para citar o documento do ImageMagick: Nem todas as combinações de nível de compactação, estratégia e tipo de filtro PNG podem ser obtidas usando a opção -quality. Para um controle mais preciso, você pode usar a opção -define.

Por exemplo, este comando deve criar um arquivo PNG descompactado (RGB):

convert INFILE \
-define png:compression-level=0 \
-define png:compression-filter=0 \
-define png:color-type=2 \
OUTFILE.png

Você pode receber um aviso, que é um bug inofensivo. Ele ainda irá produzir um png correto. link

Imagem da amostra:

112233 112233 112233 112233
445566 445566 445566 445566
778899 778899 778899 778899
aabbcc aabbcc aabbcc aabbcc

Parte do IDAT do arquivo PNG criado com o IM:

49444154081d013400cbff00
11223311223311223311223300
44556644556644556644556600
77889977889977889977889900
aabbccaabbccaabbccaabbcc
7d6f14b9...

No entanto, para determinados casos (por exemplo, compactação de grupo), pode valer a pena testar um formato com menos sobrecarga, por exemplo, TARGA (.tga).

    
por 16.09.2012 / 14:15
1

Eu gosto do conjunto de ferramentas netpbm, ele é projetado na tradição "ferramentas de software" do UNIX: "escreva programas que façam uma coisa e façam bem".

Você pode fazer o que você pediu assim:

< in.png pngtopnm > image.pnm
< in.png pngtopnm -alpha > alpha.pnm
<image.pnm pnmtopng -alpha alpha.pnm -compression 0 > out.png
rm image.pnm alpha.pnm

Você pode perder determinados metadados do arquivo PNG original.

Parece um pouco complicado, devido à maneira como lidamos com o canal alfa.

Netpbm is a toolkit for manipulation of graphic images, including conversion of images between a variety of different formats. There are over 220 separate tools in the package including converters for more than 80 graphics formats.

    
por 06.08.2012 / 09:30