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

标签 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!

我该如何解决这个问题?

最佳答案

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

实际上,您的错误在这个字符串中:rs.getBytes("name");。您没有将图像内容获取到 byteArray,而是以字节形式获取图像 name,因此 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();
}

关于java - 如何在 Java 中将 ImageInputStream 转换为 BufferedImage?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34328928/

相关文章:

java - 从几个版本运行几个 jar,但具有相同的名称和相同的类名

java - 在 Java 中调用另一个方法的参数列表中的方法是一个好习惯吗?

php - 使用 MySQL 5.6 版从源代​​码编译 PHP

php - 无法从命令行执行PHP文件

java - 找不到选项的资源方法,返回 OK,并带有允许 header : org. jboss.resteasy.spi.DefaultOptionsMethodException

javascript - jQuery 自动完成与 java 自定义数据并显示存储值

sql - 使用 JDBC 在 Sql 中查询

php - 这可以在 MySQL 查询中完成,还是需要在 PHP 中完成? (服务器端)

ubuntu - 在新的 Ubuntu 14.04.3 : Permission Denied 上共享文件夹

java - 给定 k,使用递归求几何和