如何在Java中将ImageInputStream转换为BufferedImage?

时间:2015-12-17 07:29:13

标签: java mysql ubuntu-14.04

我正在尝试从mysql数据库中检索图像blob并将其转换回图像文件。将mysql ResultSet迭代为:

while(rs.next())
{
   byte[] byteArray=rs.getBytes("image_blob");
   InputStream in=new ByteArrayInputStream(byteArray);
   ImageInputStream is = ImageIO.createImageInputStream(in);
   BufferedImage image_Bf=ImageIO.read(is);
   ImageIO.write(image_Bf, "png",new File("images/"+rs.getString("name")));
}

当我编译并运行我的java类时,它给了我错误:

  

java.lang.IllegalArgumentException:image == null!

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

ImageReader为您返回null。 Javadoc表示无法找到合适的rs.getBytes("name");,这似乎是输入无效的标志。

实际上,您的错误在此字符串中:byteArray。您没有将图像内容提供给ImageIO.read,而是以字节形式显示 name ,因此ImageIO失败。

修改

如果它仍然以相同的错误失败,那么你将不得不进行调试。尝试直接将字节缓冲区输出到文件。你这样得到有效的形象吗?我非常确定while(rs.next()) { byte[] byteArray=rs.getBytes("image_blob"); FileOutputStream fos = new FileOutputStream("images/"+rs.getString("name")); fos.write(byteArray); fos.close(); } 需要正确的图像来操作并转换为PNG。

{{1}}

答案 1 :(得分:1)

成功解决了这个问题。这是从数据库中检索图像的正确代码

background-image: url("../images/core/primnavItemBG_sprite.png");
border: 1px solid #FFFFFF; /*In Border color use color same as background color otherwise use border-size:0*/
box-shadow: none;
outline: none;