it-swarm.com.ru

Записать изображение в кодировке Base64 в файл

Как записать изображение в кодировке Base64 в файл?

Я закодировал изображение в строку, используя Base64 . Сначала я прочитал файл, затем преобразовал его в байтовый массив и затем применил кодировку Base64 для преобразования изображения в строку.

Теперь моя проблема в том, как его расшифровать.

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

Переменная crntImage содержит строковое представление изображения.

29
DCoder

Предполагая, что данные изображения уже находятся в нужном формате, вам вообще не нужно изображение ImageIO - вам просто нужно записать данные в файл:

// 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);
}

(Я предполагаю, что вы используете Java 7 здесь - если нет, вам нужно написать ручную инструкцию try/finally, чтобы закрыть поток.)

Если данные изображения не - в нужном формате, вам нужно будет предоставить более подробную информацию.

53
Jon Skeet

С Java 8's 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);

Если ваше закодированное изображение начинается с чего-то вроде data:image/png;base64,iVBORw0..., вам придется удалить часть. Смотрите этот ответ для простого способа сделать это.

10
Matthias Braun

Нет необходимости использовать BufferedImage, так как у вас уже есть файл изображения в байтовом массиве 

    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;

.... Просто поясняю, что в этом ответе используется пакет Java.util.Base64, без использования сторонних библиотек.

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