GNU/Linux >> Linux Esercitazione >  >> Linux

Come visualizzare i dati binari grezzi come un'immagine con una determinata larghezza e altezza?

Per vedere i "dati binari grezzi", userei il comando hex dump hd o 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

Non conosco alcun formato di immagine costituito da byte non strutturati:i dati sono valori RGB a 8 bit? Se il file contiene 30000 byte, è RGB per 100x100 pixel o RGB per 50x200 pixel o RGB per 200x50 pixel o qualcos'altro? C'è una tavolozza? Devi sapere qualcosa sull'organizzazione dei dati!

Per vederlo come un'immagine userei le utilità NetPBM o forse ImageMagick per convertirlo in una forma comprensibile da un visualizzatore di immagini

Se quanto sopra non può fare il lavoro, esaminerei la scrittura di un piccolo script Perl


Ok, gnuplot può farlo.

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


convert da ImageMagick può farlo.

Ad esempio, una scala di grigi 2x3 a 8 bit:

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

Quindi:

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

Spiegazione del comando:

  • -depth 8 :ogni colore ha 8 bit
  • -size 2x3+0 :2x3 Immagine. +0 significa iniziare dall'offset 0 nel file. Se ci sono intestazioni di metadati, puoi saltarle con l'offset.
  • gray:f :il file di input è f e il formato è gray , come definito su http://www.imagemagick.org/script/formats.php Questa strana notazione è usata perché ImageMagick di solito determina il formato dall'estensione, ma qui non c'è estensione.

Il problema ora è come visualizzare l'output. Un eog diretto :

eog out.png

non è molto buono perché l'immagine è troppo piccola, e se ingrandisci molto eog utilizza un algoritmo di visualizzazione che mescola i pixel, che è meglio per la maggior parte delle immagini, ma non nel nostro caso. Ho trovato due possibilità:

  • gimp out.png . Gli editor di immagini devono mostrare ogni singolo pixel.
  • convert out.png -scale 300x200 out2.png . -scale è necessario invece di -resize , poiché -resize mescola i pixel in modo molto simile a eog per impostazione predefinita.

Uscita:

Esempio RGB:

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

Testato su Ubuntu 16.04, ImageMagick 6.8.9.


Linux
  1. Estrazione e visualizzazione dei dati con awk

  2. Come visualizzare i metadati delle immagini su Linux

  3. Come configurare LogAnalyzer con Rsyslog e MySQL

  4. Come spostare i file e visualizzare l'avanzamento (ad esempio con una barra di avanzamento)?

  5. CentOS / RHEL 6:come estrarre l'immagine initramfs e modificarla/visualizzarla

Come visualizzare le statistiche del sistema Linux con Saidar

Come visualizzare l'utilizzo del disco con Duf su Linux e Unix

Come visualizzare i dati con il comando Tail in Linux

Come installare e utilizzare Okteta per file di dati RAW in Linux

Come eseguire il multi-master MySQL con Percona e Keepalived

Come installare e configurare WordPress con Ansible