GNU/Linux >> Znalost Linux >  >> Linux

Jak zobrazit nezpracovaná binární data jako obrázek s danou šířkou a výškou?

Chcete-li vidět "surová binární data", použil bych příkaz hex dump hd nebo 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

Nevím o žádném formátu obrázku, který by sestával z nestrukturovaných bajtů - jsou data 8bitové hodnoty RGB? Pokud soubor obsahuje 30000 bajtů, je to RGB pro 100x100 pixelů nebo RGB pro 50x200 pixelů nebo RGB pro 200x50 pixelů nebo něco jiného? Je tam paletka? Musíte vědět něco o organizaci dat!

Chcete-li jej zobrazit jako obrázek, použil bych nástroje NetPBM nebo možná ImageMagick k převedení do podoby, kterou chápe prohlížeč obrázků

Pokud výše uvedené nemůže dělat svou práci, prozkoumal bych psaní malého skriptu v Perlu


Dobře, gnuplot to dokáže.

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


convert z ImageMagick dokáže to.

Např. 8bitová škála šedi 2x3:

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

Potom:

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

Vysvětlení příkazu:

  • -depth 8 :každá barva má 8 bitů
  • -size 2x3+0 :2x3 obraz. +0 znamená začátek od offsetu 0 v souboru. Pokud existují záhlaví metadat, můžete je přeskočit s posunem.
  • gray:f :vstupní soubor je f a formát je gray , jak je definováno na http://www.imagemagick.org/script/formats.php Tento podivný zápis se používá, protože ImageMagick obvykle určuje formát z přípony, ale zde žádná přípona neexistuje.

Nyní je problém, jak zobrazit výstup. Přímé eog :

eog out.png

není příliš dobrý, protože obrázek je příliš malý, a pokud hodně přiblížíte eog používá zobrazovací algoritmus, který míchá pixely, což je lepší pro většinu obrázků, ale ne v našem případě. Našel jsem dvě možnosti:

  • gimp out.png . Editoři obrázků musí zobrazovat každý jednotlivý pixel.
  • convert out.png -scale 300x200 out2.png . -scale je potřeba místo -resize , od -resize míchá pixely podobně jako eog ve výchozím nastavení.

Výstup:

Příklad RGB:

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

Testováno na Ubuntu 16.04, ImageMagick 6.8.9.


Linux
  1. Extrahování a zobrazení dat pomocí awk

  2. Jak zobrazit minulý výkon se sar v Linuxu

  3. Jak spustit a zastavit OSWatcher

  1. Jak zobrazit metadata obrázků v systému Linux

  2. Jak nastavit LogAnalyzer s Rsyslog a MySQL

  3. Jak přesunout soubory a zobrazit průběh (např. pomocí ukazatele průběhu)?

  1. Proč jsou data důležitá a jak je chránit

  2. Jak zobrazit, upravit a znovu vytvořit initrd.img

  3. CentOS / RHEL 6 :Jak extrahovat obrázek initramfs a upravit/zobrazit jej