首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Java中将ImageInputStream转换为BufferedImage?

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

Stack Overflow用户
提问于 2015-12-17 07:29:12
回答 2查看 3K关注 0票数 1

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

代码语言:javascript
复制
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:图像==为空!

我怎样才能解决这个问题?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-28 07:09:12

成功重新设置此issue.Here是从数据库检索图像的正确代码。

代码语言:javascript
复制
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"))); 
            }
票数 1
EN

Stack Overflow用户

发布于 2015-12-17 07:45:37

ImageIO.read(is);为您返回null。Javadoc说这意味着它无法找到合适的ImageReader,这似乎是一个无效输入的迹象。

实际上,您的错误在以下字符串中:rs.getBytes("name");。您不是将图像内容获取到byteArray,而是以字节形式获取图像名称,因此ImageIO.read失败。

编辑:

如果同样的错误仍然失败,那么您将不得不进行调试。尝试将字节缓冲区直接输出到文件中。这样你能得到有效的图像吗?我很确定ImageIO需要一个正确的图像来操作并转换成PNG。

代码语言:javascript
复制
while(rs.next())
{
   byte[] byteArray=rs.getBytes("image_blob");
   FileOutputStream fos = new FileOutputStream("images/"+rs.getString("name"));
   fos.write(byteArray);
   fos.close();
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34328928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档