如何将BufferedImage对象转换为InputStream或BLOB?

时间:2011-10-04 08:23:59

标签: java blob inputstream

我正在尝试将用户上传的图像存储到具有LONGBLOB属性的数据库中...我遇到了PreparedStatement的问题,该问题有两种设置blob的方法:

public void setBinaryStream(int parameterIndex, InputStream x)

public void setBlob(int parameterIndex, Blob x)

public void setBlob(int parameterIndex, InputStream inputStream)

现在问题是我有一个BufferedImage对象,必须转换为BlobInputStream才能上传...

如何在不丢失原始图像格式或质量的情况下执行此操作?

4 个答案:

答案 0 :(得分:28)

  

如何在不丢失原始图像格式或质量的情况下执行此操作?

您需要使用一些适当的(无损)格式保存它。 png format是一种选择。

ImageIO类具有将图像写出到输出流的方法。

以下是您如何掌握InputStream的完整示例,您可以从中阅读BufferedImage内容的PNG表示:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
InputStream is = new ByteArrayInputStream(baos.toByteArray());

答案 1 :(得分:3)

以下是示例代码:

ByteArrayOutputStream bas = new ByteArrayOutputStream();
ImageIO.write(image,"jpg", bas);
byte[] bytes = bas.toByteArray();
InputStream is = new ByteArrayInputStream(bytes);

不要忘记将第二个ImageIO.write参数检查为所需的图像格式(例如“jpg”,“bmp”,“png”)。

答案 2 :(得分:1)

编写函数来序列化/反序列化BufferedImage 来自byte []并使用类ByteArrayInputStreamByteArrayOutputStream

您可能需要序列化图像类型,宽度和高度 和图像像素值(用BufferedImage.getRGB(x, y)获得)。

另一种方法是致电ImageIO.write(image, "png", outStream) 将图像转换为PNG格式并将其写入 ByteArrayOutputStream。相当于ImageIO.read(inputStream)ByteArrayInputStream读取图像的方法。 转换到/来自PNG有一些处理开销。 但PNG是一种压缩的图像格式,你会节省很多 与存储未压缩图像的空间相比。

答案 3 :(得分:0)

创建Blob:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "png", baos);
Blob blFile = new javax.sql.rowset.serial.SerialBlob(baos.toByteArray());