GNU/Linux >> Tutoriels Linux >  >> Linux

Comment afficher les données binaires brutes sous forme d'image avec une largeur et une hauteur données ?

Pour voir les "données binaires brutes", j'utiliserais la commande de vidage hexadécimal hd ou 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

Je ne connais aucun format d'image composé d'octets non structurés - les données sont-elles des valeurs RVB 8 bits? Si le fichier contient 30000 octets est-ce RVB pour 100x100 pixels ou RVB pour 50x200 pixels ou RVB pour 200x50 pixels ou autre chose ? Existe-t-il une palette ? Il faut savoir quelque chose sur l'organisation des données !

Pour le voir comme une image, j'utiliserais les utilitaires NetPBM ou peut-être ImageMagick pour le convertir en une forme comprise par une visionneuse d'images

Si ce qui précède ne peut pas faire le travail, j'étudierais l'écriture d'un petit script Perl


D'accord, gnuplot peut le faire.

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


convert de ImageMagick peut le faire.

Par exemple, une échelle de gris 2x3 8 bits :

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

Ensuite :

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

Explication de la commande :

  • -depth 8 :chaque couleur a 8 bits
  • -size 2x3+0 :2x3 image. +0 signifie commencer à l'offset 0 dans le fichier. S'il y a des en-têtes de métadonnées, vous pouvez les ignorer avec le décalage.
  • gray:f :le fichier d'entrée est f , et le format est gray , tel que défini sur http://www.imagemagick.org/script/formats.php Cette notation étrange est utilisée car ImageMagick détermine généralement le format à partir de l'extension, mais ici il n'y a pas d'extension.

Le problème est maintenant de savoir comment afficher la sortie. Un eog direct :

eog out.png

n'est pas très bon car l'image est trop petite, et si vous zoomez beaucoup eog utilise un algorithme d'affichage qui mélange les pixels, ce qui est mieux pour la plupart des images, mais pas dans notre cas. J'ai trouvé deux possibilités :

  • gimp out.png . Les éditeurs d'images doivent afficher chaque pixel.
  • convert out.png -scale 300x200 out2.png . -scale est nécessaire à la place de -resize , depuis -resize mixe les pixels comme eog par défaut.

Sortie :

Exemple RVB :

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

Testé sur Ubuntu 16.04, ImageMagick 6.8.9.


Linux
  1. Extraire et afficher des données avec awk

  2. Comment afficher les métadonnées d'image sous Linux

  3. Comment configurer LogAnalyzer avec Rsyslog et MySQL

  4. Comment afficher, modifier et recréer initrd.img

  5. Comment afficher les performances passées avec sar sous Linux

Comment afficher les statistiques du système Linux avec Saidar

Comment afficher l'utilisation du disque avec Duf sous Linux et Unix

Comment afficher les données avec la commande Tail sous Linux

Comment installer et utiliser Okteta pour les fichiers de données RAW sous Linux

Comment multi-maître MySQL avec Percona et Keepalived

Comment installer et configurer WordPress avec Ansible