0

画像が byte[] として保存されているデータベースを使用しています。byte[] データから画像を取得するために、この関数を作成しました。fileName は正しく、データは null ではありません。

public void convert(String fileName , byte[] data) throws IOException
    {   
    File myFile =  new File(fileName);
    System.out.println("filename is " + file);
    ByteArrayInputStream baisData = new ByteArrayInputStream(data);
    BufferedImage imag= ImageIO.read(baisData);
    if(imag == null)
    {
        System.out.println("imag is empty");
    }
    ImageIO.write(imag, "jpg", myFile);
    System.out.println("Image file written successfully");
}

しかし、このコードを実行すると、この出力が得られます。

filename is C:\Users\Abhishek\Desktop\Eclipse\try\i1.jpg
imag is empty
Exception in thread "main" java.lang.IllegalArgumentException: image == null!
  at javax.imageio.ImageTypeSpecifier.createFromRenderedImage(ImageTypeSpecifier.java:925)
  at javax.imageio.ImageIO.getWriter(ImageIO.java:1591)
  at javax.imageio.ImageIO.write(ImageIO.java:1520)
  at TempConvert.convert(TempConvert.java:32)
  at TempConvert.main(TempConvert.java:60)

「imag」オブジェクトが null である理由と、コードを完全に実行するにはどうすればよいか教えてください。よろしくお願いします。

4

2 に答える 2

1

JPEG データが含まれていることがわかっているのでdata、JPEG データを出力したいとします。次に、コードを次のように置き換えると、はるかに高速になり、ボーナスとして品質が向上します。

public void convert(String fileName , byte[] data) throws IOException {   
    File myFile =  new File(fileName);
    System.out.println("filename is " + file);
    OutputStream out = new FileOutputStream(myFile);
    try {
        out.write(data); // Just dump the database content to disk
    }
    finally {
        out.close();
    }
    System.out.println("Image file written successfully");
}
于 2013-10-20T20:32:00.203 に答える
0

あなたのimageオブジェクトはnullです。にデータがないと思いますbyte[] data

以下のように if 条件を変更します

if(imag != null)
{
    ImageIO.write(imag, "jpg", myFile);
    System.out.println("Image file written successfully");
}else{
    System.out.println("imag is empty");
}
于 2013-10-20T11:58:19.123 に答える