web-dev-qa-db-ja.com

コマンドラインから画像を非圧縮PNGに変換する

圧縮されたPNG画像がありますcompressed.png。圧縮されていないPNGに変換できますdecompressed.png GIMPを使用(PNGとして保存し、圧縮レベルを0に設定)。これはコマンドライン(Linux)でどのように実行できますか?

過去に Imagemagickconvertを使用してこれを行ったことを思い出しますが、方法を忘れました。 ドキュメント に基づいて動作するはずだと思ったいくつかのことを試しました:

  • 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

通常の圧縮PNGを書いただけです。

余談ですが、なぜ非圧縮PNGが必要なのですか?

ある場合:

  • (生の画像データやBMPを保存するのではなく)PNG形式の他の機能を使用しながら、画像データの効率的な(バイナリ)差分をサポートする必要があります。
  • Tarballまたは7zアーカイブで複数のPNGを一緒に圧縮したいが、PNG機能を使い続けたい。画像が十分に類似している場合、これは個別に圧縮するよりも優れた圧縮率を提供できます。
  • PNGオプティマイザーをテストするためのベースラインサイズとして役立ちます。
5

ImageMagickは常にPNGファイルを圧縮します。あなたが得ることができる最悪の圧縮は使用しています:

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

ただし、画像の内容によって異なります(0は、zlibよりも圧縮率が高い場合があるハフマン圧縮を使用します)。

Pngcrush( http://pmt.sourceforge.net/pngcrush/ )のような他のツールを試して、圧縮を無効にすることができます。

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

これは、圧縮レベル0(多かれ少なかれ数バイト)を使用するときにGIMPが作成するのと同じサイズのファイルを作成します。

いくつかのサイズ例(写真PNGの場合、1600x1200):

  • オリジナル:1,693,848バイト。
  • iM後:2,435,983バイト。
  • gIMP後:5,770,587バイト。
  • pngcrush後:5,802,254バイト。
3
MV.

ImageMagickのドキュメントを引用するには:-qualityオプションを使用して、圧縮レベル、戦略、およびPNGフィルタータイプのすべての組み合わせを取得できるわけではありません。より正確に制御するには、-defineオプションを使用できます。

たとえば、次のコマンドは非圧縮(RGB)PNGファイルを作成する必要があります。

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

警告が表示される場合がありますが、これは無害なバグです。それでも正しいpngが生成されます。 http://www.imagemagick.org/discourse-server/viewtopic.php?f=1&t=20257

サンプル画像:

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

IMで作成されたPNGファイルのIDATチャンク:

49444154081d013400cbff00
11223311223311223311223300
44556644556644556644556600
77889977889977889977889900
aabbccaabbccaabbccaabbcc
7d6f14b9...

ただし、特定の場合(グループ圧縮など)では、TARGA(.tga)など、オーバーヘッドの少ない形式をテストする価値がある場合があります。

5
Meyer

私はツールのnetpbmスイートが好きです。それはUNIXの「ソフトウェアツール」の伝統である「1つのことを実行してそれをうまく実行するプログラムを書く」で設計されています。

あなたはこのようにあなたが尋ねたことをすることができます:

< 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

元のpngファイルから特定のメタデータが失われる可能性があります。

アルファチャネルの処理方法のため、少し複雑に思えます。

Netpbmは、さまざまな異なる形式間の画像の変換を含む、グラフィック画像を操作するためのツールキットです。パッケージには、80を超えるグラフィック形式のコンバーターを含む220を超える個別のツールが含まれています。

1
Sam Watkins