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.
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.
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.
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();
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 );
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");
}
}