web-dev-qa-db-fra.com

Écrire une image encodée en Base64 dans un fichier

Comment écrire une image encodée en Base64 dans un fichier?

J'ai encodé une image en chaîne à l'aide de Base64 . Je lis d'abord le fichier, puis le convertis en tableau d'octets, puis applique l'encodage en Base64 pour convertir l'image en chaîne.

Maintenant, mon problème est de savoir comment le décoder.

byte dearr[] = Base64.decodeBase64(crntImage);
File outF = new File("c:/decode/abc.bmp");
BufferedImage img02 = ImageIO.write(img02, "bmp", outF); 

La variable crntImage contient la représentation sous forme de chaîne de l'image.

29
DCoder

En supposant que les données d'image soient déjà dans le format souhaité, vous n'avez pas besoin de l'image ImageIO - vous avez juste besoin d'écrire les données dans le fichier:

// Note preferred way of declaring an array variable
byte[] data = Base64.decodeBase64(crntImage);
try (OutputStream stream = new FileOutputStream("c:/decode/abc.bmp")) {
    stream.write(data);
}

(J'imagine que vous utilisez Java 7 ici. Si ce n'est pas le cas, vous devrez écrire une instruction try/finally manuelle pour fermer le flux.)

Si les données d'image n'est pas dans le format souhaité, vous devrez donner plus de détails.

53
Jon Skeet

Avec Java 8 Base64 API

byte[] decodedImg = Base64.getDecoder().decode(encodedImg.getBytes(StandardCharsets.UTF_8));
Path destinationFile = Paths.get("/path/to/imageDir", "myImage.jpg");
Files.write(destinationFile, decodedImg);

Si votre image codée commence par quelque chose comme data:image/png;base64,iVBORw0..., vous devrez supprimer la partie. Voir cette réponse pour un moyen facile de le faire.

10
Matthias Braun

Pas besoin d'utiliser BufferedImage, car vous avez déjà le fichier image dans un tableau d'octets 

    byte dearr[] = Base64.decodeBase64(crntImage);
    FileOutputStream fos = new FileOutputStream(new File("c:/decode/abc.bmp")); 
    fos.write(dearr); 
    fos.close();
3
KaviK
import Java.util.Base64;

.... Il suffit de préciser que cette réponse utilise le package Java.util.Base64 sans utiliser de bibliothèques tierces.

String crntImage=<a valid base 64 string>

byte[] data = Base64.getDecoder().decode(crntImage);

try( OutputStream stream = new FileOutputStream("d:/temp/abc.pdf") ) 
{
   stream.write(data);
}
catch (Exception e) 
{
   System.err.println("Couldn't write to file...");
}
0
DAB