生のバイナリデータを特定の幅と高さの画像として表示する方法は?


15

生のバイナリデータを表示できるLinux用のプログラムはありますか?

バイナリファイルの各バイトはピクセルを表すため、このようなものが存在する場合は非常に便利です

program_name --input=dat001.bin --width=200 --height=100

ピクセルが表示されます。

gnuplotがこれに使用できるのかしら...?


2
質問は意味がありません。生のバイナリデータを表示するには、人間が読める形式に変換する必要があります。通常、この形式は16進数で、hdフォーマットに使用できます。次に、画像を表示するように求めます。画像の場合は、少なくともbmpのような画像形式になります。少なくとも、形式、幅、高さ、色深度を識別するヘッダーがあり、カラーパレットもあります。添付。
-psusi

@psusiタイトルは良い方ですが、生のピクセルデータを表示する方法はこの質問の意図が明確であり、私にはまったく理にかなっています。(「プログラムに画像のメタデータを指定させたい」)あなたにとっても、後知恵(または編集後)で意味がありますか?
ネイサンキッド

@NathanKidd、ああ、そうです。もしそれが特定のフォーマットを使用しているが、ヘッダーを持たない画像であることを知っているなら、ただの任意のバイナリデータではなく...
-psusi


ffmpegができること:stackoverflow.com/a/15037011/5447906
anton_rh

回答:


12

「生のバイナリデータ」を表示するには、hex dumpコマンドを使用するhdか、hexdump

$ hd -C a.txt
00000000 61 0a 61 61 0a 61 61 61 0a 61 61 61 61 0a 61 61 | a.aa.aaa.aaaa.aa |
00000010 61 61 61 0a 62 62 62 0a 62 62 62 62 0a 62 62 62 | aaa.bbb.bbbb.bbb |
00000020 62 62 0a 3c 62 65 67 69 6e 3e 0a 61 61 61 61 61 | bb。<begin> .aaaaa |
00000030 61 0a 61 61 61 61 61 61 61 0a 61 61 61 61 61 61 61 | a.aaaaaaa.aaaaaa |
00000040 61 61 0a | aa。|
00000043

非構造化バイトで構成される画像形式は知りません-データは8ビットRGB値ですか?ファイルに30000バイトが含まれている場合、100x100ピクセルのRGB、50x200ピクセルのRGB、または200x50ピクセルのRGBなどがありますか?パレットはありますか?データの構成について何かを知る必要があります!

画像として表示するには、NetPBMユーティリティまたはImageMagickを使用して、画像ビューアーが理解できる形式に変換します

上記でうまくいかない場合は、小さなPerlスクリプトの作成を調査します。


これはどこで入手できますか?私はちょうどyum search hdFedoraデスクトップでやったが、それはなかった。
サンドラ

はい。ピクセルをグラフィックとして表示する必要があります...-
サンドラ

2
バイナリが呼び出される場合がありますhexdump。SuSEでは、util-linuxパッケージに含まれています。
ターボJ

FWIW hexdumpArchにもあります。
Sparhawk


10

convertImageMagickからそれを行うことができます。

たとえば、8ビットの2x3グレースケール:

printf '\x00\xFF\x88\xFF\x00\xFF' > f

次に:

convert -depth 8 -size 3x2+0 gray:f out.png

コマンドの説明:

  • -depth 8:各色には8ビットがあります
  • -size 2x3+02x3画像。+0ファイルのオフセット0から開始することを意味します。メタデータヘッダーがある場合は、オフセットでそれらをスキップできます。
  • gray:f:入力ファイルでありf、フォーマットは、grayで定義されるように、http://www.imagemagick.org/script/formats.php ImageMagickには、通常拡張からフォーマットを決定するため、この奇妙な表記法が使用されるが、ここでは拡張子がありません。

ここでの問題は、出力の表示方法です。直接eog

eog out.png

は画像が小さすぎるためあまりよくありません。また、多くを拡大する場合eogは、ピクセルを混合する表示アルゴリズムを使用します。これはほとんどの写真に適していますが、私たちの場合はそうではありません。私は2つの可能性を見つけました:

  • gimp out.png。画像エディターはすべてのピクセルを表示する必要があります。
  • convert out.png -scale 300x200 out2.png-scale代わりに必要とされて-resizeいるので、-resizeよく似アップミクセルピクセルeogデフォルトで。

出力:

ここに画像の説明を入力してください

RGBの例:

printf '\xFF\x00\x00\x00\xFF\x00\x00\x00\xFF' > f
convert -depth 8 -size 3x1+0 rgb:f out.png

ここに画像の説明を入力してください

Ubuntu 16.04、ImageMagick 6.8.9でテスト済み。


1
別の例:RGBA形式のファイル(たとえば/tmp/tex1.dat)がある場合、Imagemagickで変換された画像displayを128x256ピクセルの画像として直接表示できますdisplay -depth 8 -size 128x256+0 RGBA:/tmp/tex1.dat
-sdaau

ピクセルに10 ot 12ビットがある場合はどうなりますか?私が試してみました-endianオプションがそれとして働くようです-depth 16、画像は非常に暗いです
SOP

@sopは10 12についてはわかりません。12は深さ12で動作しますか?10 10は4(RGBA)または3(RGB)で割り切れないため、チャネルあたりのビット数をさらに指定する必要があります。これを行う方法がわからない。
Ciro Santilli新疆改造中心法轮功六四事件

4

直接表示するのではなく、変換する場合は、変換ユーティリティでこれを実行できます。

320 x 200ピクセル、8ビットグレー、ヘッダー0を想定して、stdinから読み取るには、PNG形式でpic.pngに保存します。

convert -depth 8 -size 320x200+0 gray:- pic.png

1
私のような初心者の場合:gray:-形式gray-意味し、標準入力からを意味します。したがって、現在のコマンドは標準入力を待ってハングします。私の答えでそれをさらに説明しました:superuser.com/a/978432/128124
Ciro Santilli新疆改造中心法轮功六四事件
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.