GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie kann ich rohe Binärdaten als Bild mit gegebener Breite und Höhe anzeigen?

Um die "rohen Binärdaten" zu sehen, würde ich den Hex-Dump-Befehl hd verwenden oder 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  |a.aaaaaaa.aaaaaa|
00000040  61 61 0a                                          |aa.|
00000043

Ich kenne kein Bildformat, das aus unstrukturierten Bytes besteht - sind die Daten 8-Bit-RGB-Werte? Wenn die Datei 30000 Bytes enthält, ist das RGB für 100 x 100 Pixel oder RGB für 50 x 200 Pixel oder RGB für 200 x 50 Pixel oder etwas anderes? Gibt es eine Palette? Sie müssen etwas über die Organisation der Daten wissen!

Um es als Bild anzuzeigen, würde ich die NetPBM-Dienstprogramme oder vielleicht ImageMagick verwenden, um es in eine Form zu konvertieren, die von einem Bildbetrachter verstanden wird

Wenn das obige die Arbeit nicht erledigen kann, würde ich versuchen, ein kleines Perl-Skript zu schreiben


Okay, gnuplot kann das.

http://gnuplot.sourceforge.net/demo_4.4/image.html


convert von ImageMagick kann es tun.

Z. B. eine 8-Bit-2x3-Graustufe:

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

Dann:

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

Befehlserklärung:

  • -depth 8 :jede Farbe hat 8 Bit
  • -size 2x3+0 :2x3 Bild. +0 bedeutet ab Offset 0 in der Datei. Wenn Metadaten-Header vorhanden sind, können Sie diese mit dem Offset überspringen.
  • gray:f :Die Eingabedatei ist f , und das Format ist gray , wie unter http://www.imagemagick.org/script/formats.php definiert. Diese seltsame Notation wird verwendet, weil ImageMagick normalerweise das Format aus der Erweiterung bestimmt, aber hier gibt es keine Erweiterung.

Das Problem ist jetzt, wie man die Ausgabe anzeigt. Ein direkter eog :

eog out.png

ist nicht sehr gut, weil das Bild zu klein ist, und wenn Sie viel hineinzoomen eog verwendet einen Anzeigealgorithmus, der Pixel mischt, was für die meisten Bilder besser ist, aber nicht in unserem Fall. Ich habe zwei Möglichkeiten gefunden:

  • gimp out.png . Bildbearbeiter müssen jeden einzelnen Pixel anzeigen.
  • convert out.png -scale 300x200 out2.png . -scale wird anstelle von -resize benötigt , seit -resize mischt Pixel ähnlich wie eog standardmäßig.

Ausgabe:

RGB-Beispiel:

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

Getestet auf Ubuntu 16.04, ImageMagick 6.8.9.


Linux
  1. Daten extrahieren und anzeigen mit awk

  2. Warum Daten wichtig sind und wie man sie schützt

  3. So können Sie initrd.img anzeigen, ändern und neu erstellen

  4. So zeigen Sie die vergangene Leistung mit sar in Linux an

  5. So starten und stoppen Sie OSWatcher

So zeigen Sie Linux-Systemstatistiken mit Saidar an

So zeigen Sie die Festplattennutzung mit Duf unter Linux und Unix an

So zeigen Sie Daten mit dem Tail-Befehl in Linux an

So installieren und verwenden Sie Okteta für RAW-Datendateien unter Linux

Wie man MySQL mit Percona und Keepalived multimastert

So installieren und konfigurieren Sie WordPress mit Ansible