Запись изображения с кодировкой 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
содержит строковое представление изображения.
Ответы
Ответ 1
Предполагая, что данные изображения уже находятся в нужном формате, вам совсем не нужен образ 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 вручную, чтобы закрыть поток.)
Если данные изображения не находятся в нужном формате, вам нужно предоставить более подробную информацию.
Ответ 2
С 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);
Если ваше закодированное изображение начинается с чего-то вроде data:image/png;base64,iVBORw0...
, вам придется удалить часть. Посмотрите этот ответ для простого способа сделать это.
Ответ 3
Не нужно использовать BufferedImage, так как у вас уже есть файл изображения в массиве байтов
byte dearr[] = Base64.decodeBase64(crntImage);
FileOutputStream fos = new FileOutputStream(new File("c:/decode/abc.bmp"));
fos.write(dearr);
fos.close();
Ответ 4
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...");
}
Ответ 5
Другая опция, использующая 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 );
Ответ 6
Попробуйте следующее:
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");
}
}