Ecrire Base64-image encodée au fichier

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

j'ai encodé une image à une chaîne en utilisant Base64. Tout d'abord, j'ai lu le fichier, puis je l'ai converti en un tableau d'octets, puis j'ai appliqué L'encodage Base64 pour convertir l'image en chaîne.

maintenant mon problème est 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 en chaîne de l'image.

28
demandé sur Matthias Braun 2014-01-02 13:13:59

5 réponses

en supposant que les données d'image sont déjà dans le format que vous voulez, vous n'avez pas besoin de l'image ImageIO du tout - 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);
}

(je suppose que vous utilisez Java 7 ici - si ce n'est pas le cas, vous aurez besoin d'écrire un essai manuel/déclaration finale pour fermer le flux.)

si les données d'image n'est pas dans le format que vous voulez, vous aurez besoin de donner plus de détails.

51
répondu Jon Skeet 2014-01-02 09:18:07

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 encodé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.

8
répondu Matthias Braun 2017-05-23 12:26:20

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
répondu KaviK 2015-08-13 14:30:33

autre option utilisant apache-commons:

import org.apache.commons.codec.binary.Base64;
import org.apache.commons.io.FileUtils;

...
File file = new File( "path" );
byte[] bytes = Base64.decodeBase64( "base64" );
FileUtils.writeByteArrayToFile( file, bytes );
-1
répondu Fábio De Carli 2015-12-30 12:33:57

essayez ceci:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.net.URL;
import javax.imageio.ImageIO;

public class WriteImage 
{   
    public static void main( String[] args )
    {
        BufferedImage image = null;
        try {

            URL url = new URL("URL_IMAGE");
            image = ImageIO.read(url);

            ImageIO.write(image, "jpg",new File("C:\out.jpg"));
            ImageIO.write(image, "gif",new File("C:\out.gif"));
            ImageIO.write(image, "png",new File("C:\out.png"));

        } catch (IOException e) {
            e.printStackTrace();
        }
        System.out.println("Done");
    }
}
-5
répondu Jamel ESSOUSSI 2014-01-02 09:18:27