0

Base64でコード化された文字列から画像を取得したい。

私はこの方法を使用しています:

String image = ABAfXWQAQH11kAEB9dZABAfXWQAQH11kAEB9dZABAfXW ...

public void change(){
 byte [] image = DatatypeConverter.parseBase64Binary(image);
 System.out.println(image+" bytes");
 InputStream in = new ByteArrayInputStream(imagen);
 System.out.println(in+" inStream");
 BufferedImage finalImage= ImageIO.read(in);
 System.out.println(finalImage+" buffer");
}

それを使用して、この出力を取得します

[B@ca2dce bytes
java.io.ByteArrayInputStream@18558d2 inStream
null buffer
Exception in thread "main" java.lang.NullPointerException
    at javax.swing.ImageIcon.<init>(Unknown Source)
    at MyCLass.change(MyClass.java:48)
    at MyClass.<init>(MyClass.java:26)
at MyClass.main(MyClass.java:59)

bufferedImageがnullなのはなぜですか?

4

1 に答える 1

1

ドキュメントから:

登録されたImageReaderが結果のストリームを読み取ることができると主張していない場合、nullが返されます。

だから私の推測では、登録されたImageReaderはそれを読むことができると主張していません...

InputStreamあなたのコードにあなたが質問で持っているタイプミスがないと仮定すると(imagenの代わりにimage)、私が簡単に考えることができる3つのオプションを残します:

  • そもそも画像データが壊れていた
  • 誤ってbase64にエンコードしました
  • DatatypeConverter.parseBase64あなたが持っているbase64フォーマットにはあまり適していません。(これは私が以前に使用したコンバーターではありません。base64には多くのオプションがあります-たとえば、このパブリックドメインのもの
  • データは到達するまでにすべて正常ですがImageIO.read、サポートされている画像形式ではありません。

これらのどちらが当てはまるかを理解する必要があります。特に、base64エンコーディングを完全にスキップするとどうなりますか?または、base64でエンコードされてからデコードされたデータを元のデータと比較するとどうなりますか?(少なくとも同じ長さですか?)base64でデコードされたデータをファイルに書き出す場合、お気に入りの画像プログラムで開くことができますか?

于 2012-05-16T21:21:53.630 に答える