java.awt.Image
很简单。它不提供任何写入/保存图像的方法,也不提供任何访问图像底层像素数据的方法。
第一步,是将java.awt.Image
到某事ImageIO
可以支持。这将允许您写出图像数据......
ImageIO
需要一个RenderedImage
因为它是主要图像源。BufferedImage
是默认库中此接口的唯一实现...
不幸的是,没有简单的方法可以从一种转换为另一种。幸运的是,这并不难。
Image img = ...;
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_ARGB);
Graphics2D g2d = bi.createGraphics();
g2d.drawImage(img, 0, 0, null);
g2d.dispose();
基本上,这只是绘制原始的java.awt.Image
到BufferedImage
接下来,我们需要以某种方式保存图像,以便它可以生成InputStream
...
这有点不太理想,但可以完成工作。
ByteArrayOutputStream baos = null;
try {
baos = new ByteArrayOutputStream();
ImageIO.write(bi, "png", baos);
} finally {
try {
baos.close();
} catch (Exception e) {
}
}
ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray());
基本上,我们将图像写入ByteArrayOutputStream
并使用结果生成ByteArrayInputStream
现在。如果内存有问题或者图像相当大,您可以先将图像写入File
然后简单地阅读File
通过某种方式回来InputStream
反而...
最后,我们设置InputStream
到所需的列...
PreparedStatement stmt = null;
//...
stmt.setBlob(parameterIndex, bais);
布洛布是你叔叔……