プログラムの生データソースとしてPPMを生成する必要があります。入力としてpngファイルがたくさんあり、これをppmに変換します。同様のツールを使用しようとすると、mogrify
どの画像ビューアプログラム(GIMPなど)でも読み取れないファイルが生成されます。
mogrify -format ppm *.png
netpbm
パッケージをインストールしました。他の場所で任意の他のPPMを開いてみましたが、すべての画像ビューアでこれらのファイルを開いて読み取ることができます。自分で作成したファイルに問題があります。を使用して生成されたファイルは、そのmogrify
解像度に適したサイズに見え、ビットを含みます。
Hexファイルビューアでは、作業ファイルのヘッダーは次のとおりです。
P6 640480 25
Imagemagickを使用して以下を作成しました。
P7幅640高さ480深さ3 MAXVAL 255 TUPLTYPE RGB ENDHD
おそらく、ファイル形式を正しく作成するためにImagemagickに他のパラメータを提供する必要があるかもしれません。しかし、どうなりますか?それともpngをppmに簡単に変換できる他のツールはありますか?
答え1
ウィキペディアページを見ると生産計画管理そしてポリアクリルアミドPPMのマジックナンバーは次のとおりです。
から抜粋PPM Wikipediaページ
各ファイルは、ファイルタイプ(PBM、PGM、PPM)とエンコード(ASCIIまたはバイナリ)を記述する2バイトのマジック番号(ASCII形式)で始まります。マジックナンバーは、大文字Pの後に単一の数字が続く形式です。
Magic Number Type Encoding
P1 Portable bitmap ASCII
P2 Portable graymap ASCII
P3 Portable pixmap ASCII
P4 Portable bitmap Binary
P5 Portable graymap Binary
P6 Portable pixmap Binary
PAM形式のマジックナンバーはP7です。以前の形式(PPM、PNM、PGM、PBM)と比較すると、次の違いもあります。
PAMファイル形式のヘッダーはP7で始まり(他の形式とは異なり)、明示的な終了者:ENDHDRで終わります。
PAMの単純な(人間が読める、ASCIIベースの)バージョンはありません。 PAMファイルは常にバイナリであり、PAM出力を生成するNetpbmプログラムで-plainスイッチを使用しようとするとエラーメッセージが表示されます。
PBMに対応する白黒バージョンのPAM(深さ1、タプルタイプBLACKANDWHITE)の場合、PAMはピクセルあたり1ビット(1バイトに8ピクセルを圧縮)を使用するPBMの代わりにピクセルあたり1バイトを使用します。さらに、PAM画像では、値1は、PBMの黒(「暗」)とは異なり、白(「明」)を表します。
はい
mogrify
次のコマンドを使用してPNGファイルをPPMファイルに変換する場合:
blah.pngをblah.ppmに変換:
mogrify -format ppm blah.png
ファイル情報:
$ ll |grep bla
-rw-rw-r-- 1 saml saml 11870 May 29 21:36 blah.png
-rw-rw-r-- 1 saml saml 530613 May 29 21:36 blah.ppm
識別情報:
$ identify blah.png blah.ppm
blah.png PNG 926x191 926x191+0+0 8-bit DirectClass 11.9KB 0.000u 0:00.000
blah.ppm[1] PNM 926x191 926x191+0+0 8-bit DirectClass 531KB 0.000u 0:00.000
16進ヘッダー情報:
$ xxd blah.ppm|head -3
0000000: 5036 0a39 3236 2031 3931 0a32 3535 0af2 P6.926 191.255..
0000010: f1f0 0000 0000 0000 0000 0000 0000 0000 ................
0000020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
$ xxd blah.png |head -3
0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
0000010: 0000 039e 0000 00bf 0802 0000 0019 f594 ................
0000020: be00 0000 0373 4249 5408 0808 dbe1 4fe0 .....sBIT.....O.
ご覧のとおり、mogrify
PPMファイルが正しく作成されました(P6を参照)。
それでは何が間違っていますか?
私はPPMフォーマットがサポートしておらず、mogrifyが自動的に処理できないPPMに変換したいソースイメージに特別な点があるかどうか疑問に思います。
identify
ソースイメージを調べるには、次のコマンドを使用することをお勧めします。
identify <original image>
編集#1
OPが元の画像を公開しました。ここ。mogrify
PPMファイルの代わりにPAMファイルが返されるこのイメージを直接実行して結果を再現することはできません。
生成されたppm:
mogrify -format ppm some.png
元のpngと新しいppmファイル:
ll|grep some
-rw-rw-r-- 1 saml saml 387940 May 30 00:36 some.png
-rw-rw-r-- 1 saml saml 921615 May 30 07:00 some.ppm
$ identify some.p*
some.png PNG 640x480 640x480+0+0 8-bit DirectClass 388KB 0.000u 0:00.000
some.ppm[1] PNM 640x480 640x480+0+0 8-bit DirectClass 922KB 0.000u 0:00.009
ファイルヘッダー情報:
$ xxd some.png |head -3
0000000: 8950 4e47 0d0a 1a0a 0000 000d 4948 4452 .PNG........IHDR
0000010: 0000 0280 0000 01e0 0802 0000 00ba b34b ...............K
0000020: b300 0020 0049 4441 5478 0184 c181 b21c ... .IDATx......
$ xxd some.ppm |head -3
0000000: 5036 0a36 3430 2034 3830 0a32 3535 0a65 P6.640 480.255.e
0000010: 6e6b 656e 6b62 6e6a 626e 6a5f 706a 5f70 nkenkbnjbnj_pj_p
0000020: 6a5e 726b 5e72 6b5a 6d66 596c 6559 6a64 j^rk^rkZmfYleYjd
ファイルが正常に変換されました。実行するとdisplay some.ppm
ファイルが表示されるので、何をすべきかわかりません。私はOPの識別コマンドがファイルをsRGBで表示するのに対して、私のシステムではこのファイルが「8ビットDirectClass」を表示することに気づきました。この2つの違いは詳しくはこちらしかし、どうすればいいのかわかりません。
この問題の調査中に、sRBGとPNGに関連するImageMagickにバグがある複数のスレッドが見つかりました。これはリンク例。