Bonjour,
j'aimerais savoir comment récuperer sous un fichier texte le code binaire d'une image jpeg ?
Du moins :
- pouvoir "ouvrir" une image et copier le code dans son integralité.
- Pourvoir réutiliser ce code pour l'afficher en image normale.
Bonjour,
j'aimerais savoir comment récuperer sous un fichier texte le code binaire d'une image jpeg ?
Du moins :
- pouvoir "ouvrir" une image et copier le code dans son integralité.
- Pourvoir réutiliser ce code pour l'afficher en image normale.
Toujours pareil...
comment récuperer les données binaires d'un fichier jpg ou bmp ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51 import java.io.BufferedWriter; import java.io.DataInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; /* * Created on 26 oct. 2005 * * To change the template for this generated file go to * Window>Preferences>Java>Code Generation>Code and Comments */ /** * @author rchaperon * * To change the template for this generated type comment go to * Window>Preferences>Java>Code Generation>Code and Comments */ public class FileConverter { public static void main(String[] args) { File out = new File("result.txt"); File in = new File("oeil.bmp"); try { DataInputStream entree= new DataInputStream(new FileInputStream(in)); BufferedWriter bw=new BufferedWriter(new FileWriter(out)); for(int i=0;i<in.length();i++) { bw.write(entree.readUTF()); bw.flush(); } bw.close(); System.out.println("ok terminé."); } catch(Exception e) { e.printStackTrace(); } } }![]()
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 java.io.UTFDataFormatException at java.io.DataInputStream.readUTF(Unknown Source) at java.io.DataInputStream.readUTF(Unknown Source) at FileConverter.main(FileConverter.java:37)
Pourquoi fais-tu un readUTF() ? Fais de simples read().
Bonjour Gfx;Envoyé par Gfx
Tu vas peut-être, une fois de plus, être mon sauveur...![]()
J'ai tout tenté : readUTF(), read(), readByte(), etc...
Cela ne me renvois jamais un fichier en binaire !
Et de plus, dans tous les cas, il manques des symboles même si je fais une simple copie, et l'image du coup n'est pas relisible.
Bref, moi ce que je souhaiterais, c'est avoir la suite de "0" et de "1" équivalent à un fichier jpg ou bmp...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 File out = new File("resultOeil.bmp"); File in = new File("oeil.bmp");![]()
et après tu fais le traitement non plus sur entree mais sur sourceByte, avec une boucle sur un readByte() au lieu d'un readUTF().
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 DataInputStream entree= new DataInputStream(new FileInputStream(in)); InputSource source=new InputSource(entree); DataInputStream sourceByte=source.getBytes();
Ce code marche :
Mais si tu veux faire un fichier texte "lisible" pour un humain l'image ne pourra pas etre affichee. D'autant plus que les Reader et Writer sont faits pour ecrire du texte et pas du binaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 File out = new File("result.png"); File in = new File("ubuntu.png"); try { BufferedInputStream entree= new BufferedInputStream(new FileInputStream(in)); BufferedOutputStream bw=new BufferedOutputStream(new FileOutputStream(out)); int read = -1; byte[] b = new byte[32 * 1024]; while ((read = entree.read(b, 0, b.length)) != -1) { bw.write(b, 0, read); } bw.flush(); bw.close(); System.out.println("ok terminé."); } catch(Exception e) { e.printStackTrace(); }
Du coup je ne comprends pas trop ce que tu veux faire ^^
Ah attends tu veux un fichier texte qui contient uniquement des caracteres '0' et '1' ? C'est tres different a faire et tu ne pourras de toute facon pas afficher l'image depuis le fichier cree. Tu devras faire un truc dans ce genre :
Il y a surement plus efficace mais ca devrait marcher.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 // lire un byte dans b for (int i = 0; i < 8; i++) { sortie.write((b >> i) & 0x1 == 1 ? '1' : '0'); }
En fait un collègue souhaite utiliser un programme de chiffrement que j'ai développer il y a quelques années (au départ pour chiffrer des messages), et il voudait que mon programme puisse chiffrer des fichiers.Envoyé par Gfx
J'essaye donc de trouver un moyen de récuperer toutes les données d'un fichier image afin de chiffrer ces données, pour ensuite pouvoir les déchiffrer et réafficher l'image.
Le problème est que si je prend les données tel quel (un fichier jpg ouvert sous wordpad), certains symboles ne sont pas copiés dans le presse papier ! (tu fais un couper/coller dans un même fichier jpg, et ton image ne s'affiche plus)
Voila mon problème.
Ah ok, oui bon ben evidemment ^^ Un fichier dit binaire contient des suites de bits qui ne peuvent pas etre interpretees comme des caracteres imprimables. Bref, soit tu lis le fichier et tu le chiffres sans le convertir, donc tout depuis ton programme, soit tu convertis le fichier dans un format comme le Base64 avant de le chiffrer. Mais il n'y a pas d'interet a faire cela. Bref modifie ton soft de chiffrement pour qu'il agisse sur des bytes et non des char, et lis les donnees directement depuis le fichier en lieu et place d'une zone texte ou autre.
C'est exactement ce que j'essaye de faire....
Mais c'est chaud de parvenir à récuperer le "texte" des données pour les chiffrer...![]()
Mais heu non. Pourquoi tu veux recuperer une version en texte ? Travaille directement sur les donnees binaires.
Mon programme n'accepte que les String....Envoyé par Gfx
![]()
![]()
![]()
Et je n'ai pas envie de tout retoucher!
Ben tu peux creer une String a partir d'un tableau de byte[]. Tu peux aussi utiliser les algorithmes de chiffrage fournis dans le JDK.
Tout à fait et ça à l'air de marcher !!!Envoyé par Gfx
![]()
![]()
Je me suis lancé le défi d'utiliser mon programme perso, quand j'ai vu que j'avais du mal !Envoyé par Gfx
![]()
Bon les nouvelles du front:
Le chiffrement fonctionne.
Mais j'aimerais qu'il me copie le fichier résultat au même endroit que le fichier source en le renommant.
Par exemple, si l fichier source se nomme "/machin/monrep/Sample02.bmp", que le fichier résultat soit nommé "/machin/monrep/Sample02-Cryptor.bmp".
Comment récuperer le classPath du fichier source (la methode getAbsolutePath() retournant le classPath du fichier + son nom) ?
Comment nommer un fichier en fonction du nom d'un autre fichier ?
..Gfx ?![]()
![]()
..je déconne, toutes les réponses sont les bienvenues.
Utilise simplement getParent().getAbsolutePath() pour avoir le chemin du repertoire contenant le fichier. Ensuite utilise getName() pour avoir le nom du fichier. Enfin, avec le nom, fais un lastIndexOf('.') pour recuperer la position de l'extension puis des substring() pour recuperer le nom sans l'extension et l'extension en inserant entre les deux ton -Cryptor.
Genre :
Pas teste mais ca devrait marcher (ou pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 String name = source.getName(); int index = name.lastIndexOf('.'); name = name.substring(0, index) + "-Cryptor" + name.substring(index); File nouveauFichier = new File(source.getParent(), name);.
J'avais trouver comment renommer le fichier, sachant que pour la suite il était plus judicieux de mettre le "-Cryptor" devant.
C'est le "new File(in.getParent(),nom);" qui me manquait.
Merci encore, maitre Yoda.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 File in = new File(classPath); String name = in.getName(); String nom = "Cryptor-"+name; File out = new File(in.getParent(),nom);
moi jeune padawan...
Il me reste un souçi:
le code suivant me provoque 3 lectures consécutives alors qu'il faudrait qu'il lise l'ensemble des données en 1 seule fois !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 KeyCross k = new KeyCross(); String secretKey = k.KeyCrossing(clePub,clePriv); DesEncoding desencoding = new DesEncoding(); try { File in = new File(classPath); String name = in.getName(); String nom = name.replaceAll("Cryptor-","Result-"); File out = new File(in.getParent(),nom); System.out.println(classPath); System.out.println(out.getAbsolutePath()); FileInputStream fin= new FileInputStream(in); FileWriter fo = new FileWriter(out); byte buffer[]=new byte[512*1024]; int nbLecture; while( (nbLecture = fin.read(buffer)) != -1 ) { String s = new String(buffer, 0, nbLecture); desencoding.read(s); desencoding.setFileValeurProgress(progress);//on fixe la valeur maximum de la ProgressBar en fonction du message à crypter desencoding.codeLecture(secretKey,this,ihm); System.out.println("on décode!"); } String messageClair=DeCodage.getFuturFile(); fo.write(messageClair); fo.flush(); fo.close(); fin.close(); JOptionPane.showConfirmDialog(ihm,"Décodage du fichier terminé!","Décodage de fichier",JOptionPane.OK_CANCEL_OPTION,JOptionPane.ERROR_MESSAGE);
Utilise un StringBuffer pour concatener les donnees et decrypte tout a la fin...
Non, j'ai simplement regler la longueur du Byte[] en fonction de la longueur du fichier :Envoyé par Gfx
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 byte[] b = new byte[(int) in.length()];
Partager