【问题标题】:How can I turn an ImageIcon back into a blob?如何将 ImageIcon 变回 blob?
【发布时间】:2011-06-07 15:32:43
【问题描述】:

我已将 Blob(PNG 文件)存储到数据库中,如下所示:

File file = new File( "image.png" );
FileInputStream fis = new FileInputStream( file );
statement.setBinaryStream( 1, fis, (int) file.length() );

目前我使用这个过程从数据库中获取Blob图像并将其转换回图像以供使用:

Blob blob = results.getBlob( 1 );
ImageIcon imageIcon = new ImageIcon( blob.getBytes( 1L, (int) blob.length() ) );

但是,我需要一种方法将图像从 ImageIcon 放回数据库(在我更改它之后)而不创建文件,将其存储到磁盘然后使用 FileInputSteam 将其读回。

为清晰起见进行编辑 好吧,假设我将该图像作为 ImageIcon 存储在 Label 中。我知道如何将其放入数据库的唯一方法是从 FileInputStream 中读取,但这将涉及毫无意义地制作图像文件。那么我如何将 ImageIcon 中的图像作为 BinaryStream 或 Blob 读回数据库?

【问题讨论】:

  • 你能澄清一下吗?您是否无法使用 java 对象“文件”,或者您不想在磁盘上创建另一个文件?更改文件时是否更改了文件名?您是说您不能使用文件和 FileInputStream 存储然后读取文件,或者您不能使用文件存储它,但您需要使用 FileInputStream 读取它?坦率地说,你的问题是什么?

标签: java image blob


【解决方案1】:

我会尝试这样的事情

PixelGrabber pg = new PixelGrabber(imageIcon.getImage(),0,0, w,h,true);
pg.grabPixels();
// You may need to wait here until all pixels are copied (see ImageObserver)
Object buffer = pg.getPixels();

http://download.oracle.com/javase/1.4.2/docs/api/java/awt/image/PixelGrabber.html

您可能需要适当地调整它并指定正确的 w 和 h。

【讨论】:

    【解决方案2】:

    在 Blob API 中:

    setBinaryStream(long pos) 返回一个OutputStream

    “检索可用于写入此 Blob 对象表示的 BLOB 值的流。”因此,您可以将您的位直接写入该流。

    我不太确定如何从修改后的ImageIcon 中获取像素。如果您可以将其转换为 BufferedImage,则该类具有 getRGB 方法。

    【讨论】:

      猜你喜欢
      • 2012-12-30
      • 2014-03-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多