web-dev-qa-db-ja.com

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には、画像の文字列表現が含まれています。

34
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ステートメントを記述してストリームを閉じる必要があります。)

画像データではないが希望する形式の場合、詳細を指定する必要があります。

58
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...のようなもので始まる場合、その部分を削除する必要があります。簡単な方法については、 この回答 をご覧ください。

15
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

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 );
0
Fábio De Carli
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