我试图从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:图像==为空!
我怎样才能解决这个问题?
发布于 2016-01-28 07:09:12
成功重新设置此issue.Here是从数据库检索图像的正确代码。
while (rs.next())
{
Blob image_blob=rs.getBlob("image_100x100");
int blobLength = (int) image_blob.length();
byte[] blobAsBytes = image_blob.getBytes(1, blobLength);
InputStream in=new ByteArrayInputStream( blobAsBytes );
BufferedImage image_bf = ImageIO.read(in);
ImageIO.write(image_bf, "PNG", new File(folder_path+"/"+rs.getString("name")));
}发布于 2015-12-17 07:45:37
ImageIO.read(is);为您返回null。Javadoc说这意味着它无法找到合适的ImageReader,这似乎是一个无效输入的迹象。
实际上,您的错误在以下字符串中:rs.getBytes("name");。您不是将图像内容获取到byteArray,而是以字节形式获取图像名称,因此ImageIO.read失败。
编辑:
如果同样的错误仍然失败,那么您将不得不进行调试。尝试将字节缓冲区直接输出到文件中。这样你能得到有效的图像吗?我很确定ImageIO需要一个正确的图像来操作并转换成PNG。
while(rs.next())
{
byte[] byteArray=rs.getBytes("image_blob");
FileOutputStream fos = new FileOutputStream("images/"+rs.getString("name"));
fos.write(byteArray);
fos.close();
}https://stackoverflow.com/questions/34328928
复制相似问题