Interpreter code binaire sous forme d'image ?
Fermé
naixm
Messages postés
4
Date d'inscription
mardi 24 février 2009
Statut
Membre
Dernière intervention
26 février 2009
-
26 févr. 2009 à 22:18
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 19 juil. 2012 à 09:11
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 19 juil. 2012 à 09:11
A voir également:
- Interpreter code binaire sous forme d'image ?
- Mise en forme conditionnelle excel - Guide
- Codage binaire - Guide
- Code asci - Guide
- Code puk bloqué - Guide
- Image iso - Guide
4 réponses
naruto150589
Messages postés
220
Date d'inscription
mercredi 22 août 2007
Statut
Membre
Dernière intervention
5 juin 2011
37
26 févr. 2009 à 23:03
26 févr. 2009 à 23:03
Salut je sait pas si sa a un quelconque rapport mais j'ai trouver sa par hasard:
http://www.developpez.net/forums/d144099/webmasters-developpement-web/asp/creation-image-partir-code-binaire/
http://www.developpez.net/forums/d144099/webmasters-developpement-web/asp/creation-image-partir-code-binaire/
xvyr
Messages postés
14
Date d'inscription
vendredi 25 mai 2007
Statut
Membre
Dernière intervention
22 avril 2009
1
27 févr. 2009 à 01:44
27 févr. 2009 à 01:44
Bonjour,
Le format de l'image (RGB, niveau de gris) influe sur les données de celles ci
Si tu veux l'image la plus grande possible il faut utiliser le format niveaux de gris (grayscale)
Un pixel dans ce format est stockés sous la forme d'un octet (8 bits).
La valeur de cet octet indique la couleur du pixel (0 = noir et 255 = blanc).
Ton exemple de 2056 bits ( = 257 octets) permet donc de faire une image de 257 pixels (environ 16x16 px)
si tu veux faire une image en couleur, un pixel est stocké sur 3 octets (un pour le rouge, un pour le vert et un pour le bleu) donc la taille est divisée par 3.
Pour 2056 bits cela fait donc une image de 85 pixels (environ 9x9 px)
En résumé pour la taille de l'image (en nombre de pixels) :
- en niveau de gris = Nbits/8
- en couleur (RGB) = Nbits/24
Il suffit après de faire la racine carré pour obtenir une taille du type HxL pixels
Le format de l'image (RGB, niveau de gris) influe sur les données de celles ci
Si tu veux l'image la plus grande possible il faut utiliser le format niveaux de gris (grayscale)
Un pixel dans ce format est stockés sous la forme d'un octet (8 bits).
La valeur de cet octet indique la couleur du pixel (0 = noir et 255 = blanc).
Ton exemple de 2056 bits ( = 257 octets) permet donc de faire une image de 257 pixels (environ 16x16 px)
si tu veux faire une image en couleur, un pixel est stocké sur 3 octets (un pour le rouge, un pour le vert et un pour le bleu) donc la taille est divisée par 3.
Pour 2056 bits cela fait donc une image de 85 pixels (environ 9x9 px)
En résumé pour la taille de l'image (en nombre de pixels) :
- en niveau de gris = Nbits/8
- en couleur (RGB) = Nbits/24
Il suffit après de faire la racine carré pour obtenir une taille du type HxL pixels
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
27 févr. 2009 à 08:55
27 févr. 2009 à 08:55
Salut.
Bon, partons du principe que chaque lettre correspond à un pixel. La taille de ton image sera de la longueur de te chaine. Bien sur, une image c'est plutôt un tableau, il faut donc segmenter ton image, j'y reviendrais plus tard.
Avec quoi compte tu faire ça ? Je te conseil octave (ou matlab si tu l'as sous la main).
La procédure avec octave (En c ou autre c'est à peu près la même, seul les subtilité de langue change) c'est de commencer à lire ton texte. Tu prends ton fichier .txt, et tu lui dit de l'ouvrir en binaire. Ensuite tu lis les données en les stockant dans un tableau, tu lis des données de taille 1 octet.
Tu as maintenant ton tableau 1D, il faut le scinder pour avoir une image. Si la taille est un nombre premier, tu es obligé de bidouiller (c'est le cas le plus contraignant, on peut donc le prendre par défaut).
Tu peux par exemple prendre la racine carré et scinder ainsi. Ensuite pour ce qui restera soit tu rajoute des espaces soit tu tronque de manière à avoir ce qu'il faut. à toi de voir.
Tu as maintenant un tableau 2D d'entier. Ces entiers ont des valeurs entre 32 et 122 (cf. table ascii)
Sous octave (ou matlab) il y a la fonction imagesc(), si Im est le tableau 2D de tes images, il suffit de faire :
imagesc(Im);
et il t'affichera ton image comme il faut, c'est à dire que le noir sera la valeur la plus faible et le blanc la plus élevée.
Voilà le principe général, si tu donne plus de détails techniques, je pourrai t'en dire plus.
Ensuite, bien sur, tu peux varié les interprétations : grouper les lettres par 3 pour avoir du RVB, ignorer espaces majuscule et ponctuation pour avoir une image plus "lisse" etc.
Je suis curieux de voir ce que ça donne.
Bon, partons du principe que chaque lettre correspond à un pixel. La taille de ton image sera de la longueur de te chaine. Bien sur, une image c'est plutôt un tableau, il faut donc segmenter ton image, j'y reviendrais plus tard.
Avec quoi compte tu faire ça ? Je te conseil octave (ou matlab si tu l'as sous la main).
La procédure avec octave (En c ou autre c'est à peu près la même, seul les subtilité de langue change) c'est de commencer à lire ton texte. Tu prends ton fichier .txt, et tu lui dit de l'ouvrir en binaire. Ensuite tu lis les données en les stockant dans un tableau, tu lis des données de taille 1 octet.
Tu as maintenant ton tableau 1D, il faut le scinder pour avoir une image. Si la taille est un nombre premier, tu es obligé de bidouiller (c'est le cas le plus contraignant, on peut donc le prendre par défaut).
Tu peux par exemple prendre la racine carré et scinder ainsi. Ensuite pour ce qui restera soit tu rajoute des espaces soit tu tronque de manière à avoir ce qu'il faut. à toi de voir.
Tu as maintenant un tableau 2D d'entier. Ces entiers ont des valeurs entre 32 et 122 (cf. table ascii)
Sous octave (ou matlab) il y a la fonction imagesc(), si Im est le tableau 2D de tes images, il suffit de faire :
imagesc(Im);
et il t'affichera ton image comme il faut, c'est à dire que le noir sera la valeur la plus faible et le blanc la plus élevée.
Voilà le principe général, si tu donne plus de détails techniques, je pourrai t'en dire plus.
Ensuite, bien sur, tu peux varié les interprétations : grouper les lettres par 3 pour avoir du RVB, ignorer espaces majuscule et ponctuation pour avoir une image plus "lisse" etc.
Je suis curieux de voir ce que ça donne.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
19 juil. 2012 à 09:11
19 juil. 2012 à 09:11
je reviens sur ce vieux truc. J'ai téléchargé un texte de Verne "autour de la lune" sur Gutenberg, donc assez long.
j'ai tapé le code suivant sous octave :
101 est le code du "e", lettre normalement la plus présente dans un texte. La fonction avec le modulo me permet alors d'avoir une espèce de fond blanc. C'est un choix. Le résultat n'est franchement pas terrible.
étape suivante : faire un son à partir du texte, ça peut être rigolo aussi.
j'ai tapé le code suivant sous octave :
fs=fopen("autourlune.txt","rb"); txt=fread(fs);% par défaut lit tout le fichier sous forme de uchar size(txt,1) %% donne la taille pour l'image ima=reshape(txt(1:361200,600,602); %% je transforme le vecteur du texte en matrice colormap(bone(256)); imagesc(mod(ima+101,256))
101 est le code du "e", lettre normalement la plus présente dans un texte. La fonction avec le modulo me permet alors d'avoir une espèce de fond blanc. C'est un choix. Le résultat n'est franchement pas terrible.
étape suivante : faire un son à partir du texte, ça peut être rigolo aussi.