[JAVA] Decoder un BinaryBase64

Bonjour.
Je vous expose vite fait mon problème.
Je dispose d’un fichier XML contenant différent champs, donc un champs contenant une image codé en Base64Binary.
Je veux decoder cette image depuis une servlet. En cherchant sur le net, j’ai trouvé pas de decoder en C#, en VBScript,… j’en ai meme trouvé un en Java ici. Le problème est que j’arrive pas a la decoder cette saloperie d’image.
Pour donner un exemple, l’image de départ est celle-ci :

et voici le resultat decodé :

Y a comme une connerie qui traine quelque part.

Pour decodé mon image, j’utilise donc la classe Base64 citée plus haut. Je vous met mon ptit bout de code en dessous. Je me dis que je dois faire une connerie quand j’ecris dans mon fichier, mais je ne sais pas où.

[code] // Je créé mon fichier destination
File imgFile = new File(imgDir+"\"+titre+".gif");
imgFile.createNewFile();
String imgData;
Base64Coder decoder = new Base64Coder();

	// Je créé mon FileWriter pour ecrire dans mon fichier
	FileWriter fw;
	// Je récupère mon String decodé
	imgData = decoder.decode(imgContent);
	// Et je l'ecrit dans mon fichier, puis je le ferme	  
	fw = new FileWriter(imgFile);
	fw.write(imgData);
	fw.close();[/code]

Voila. Quelqu’un a une idée d’où peut venir mon problème ? Je sens encore gros comme une maison que j’ai fais une erreur vraiment stupide mais que je la voit pas vu que je suis planté la dessus depuis deux jours…

P.S : A tiens, l’image n’apparait pas comme avec le visualisateur d’image de windows B)

Tu cherche quoi exactement ? Un truc en java, en c# ou en vb ? Il doit manquer des mots, ou y en avoir en trop. Accessoirement, pour ton probleme, je pense pas que l’erreur vienne du l’écriture dans le fichier, mais plutôt dans le décode. Cela dit, ce qui me surprend un peu, c’est que tu n’écrivre pas un seul header pour l’image.

Oui, je faisait 12 trucs en meme temps et vu que je suis plutot sequentiel comme mec (hein Dadal) bin, des fois je me perd. Donc, je voulais dire que oui j’avais trouvé des decoders n C#, VBS qui fonctionnent, et meme en java, mais qu’ils ne marchaient pas.
Bon, bref, pour ce qui est des headers, j’ai pas à m’en occuper puisqu’ils sont dans le string encodé. J’ai resolu le problème en passant par une autre methode de decodage : SOAP, et en ecrivant byte a byte dans le fichier.

EDIT : Je trouve plus le bouton pour supprimer les threads.
Note pour moi meme : Arrete la cafeine t’es trop speed.

Un peu dans le même style, peut-être que ça peut aider, 2 méthodes pour transformer un tableau d’octets en ImageIcon et inversement.
J’avais eu le même soucis que toi et finallement ces méthodes étaient bien utiles !

public static ImageIcon base64ToImage(byte[] base64Data) { byte[] decodedData = Base64.decode(base64Data); ImageIcon image = new ImageIcon(decodedData); return image; }

public static byte[] ImageToBase64(ImageIcon i) { BufferedImage bi = new BufferedImage(i.getIconWidth(), i.getIconHeight(), BufferedImage.TYPE_INT_ARGB); Graphics2D g2 = bi.createGraphics(); g2.drawImage(i.getImage(), 0, 0, null); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bi, type, baos); byte[] base64Data = Base64.encode(baos.toByteArray()); return base64Data; }

On remarquera que le passage byte[] -> ImageIcon se fait en 2 lignes et que ImageIcon -> byte[] se fait en vachement pluss. B) Si y’avais un moyen de récupérer directement le byte[] dans la classe ImageIcon, ca simplifierai bien la tâche !