当前位置: 首页 > 知识库问答 >
问题:

在MySQL中显示存储为BLOB的图像,而不写入磁盘

萧明贤
2023-03-14

我有一个小程序,它将图片/图像文件作为BLOB存储在MySQL表中。稍后,我需要能够在单独的JFrame中显示此图像(已经得到了这个)。

public static void showImage(File imageFile) {
    JFrame f = new JFrame();
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
    ImageIcon image = new ImageIcon(imageFile.getAbsolutePath());
    JLabel lbl = new JLabel(image);
    f.getContentPane().add(lbl);
    f.setSize(image.getIconWidth(), image.getIconHeight());

    int x = (screenSize.width - f.getSize().width) / 2; 
    int y = (screenSize.height - f.getSize().height) / 2;

    f.setLocation(x, y);
    f.setVisible(true);
}

我目前所做的是:我从MySQL中获取BLOB数据并创建一个本地(临时)文件并将其显示在JFrame中。

private void createFile() {
    File imageFile = File.createTempFile("tmp-", ".jpeg", new File("./temp/"));
    OutputStream out = null;
    out = new FileOutputStream(imageFile);
    Blob blob = new javax.sql.rowset.serial.SerialBlob((byte[]) grdGrid.getModel().getValueAt(row, grdGrid.getColumn("picture").getModelIndex()));
    byte[] buff = blob.getBytes(1, (int) blob.length());
    out.write(buff);
    out.close();
    showImage(imageFile);
}

有没有办法在不在磁盘上创建本地文件的情况下做到这一点?类似于:

private void someMethod() { //just symbolic
    Blob blob = MySQL.getBlob();
    ImageIcon = blob.toImage();
}

谢谢你的帮助

共有2个答案

松成和
2023-03-14

如图所示,您可以从Blob获取一个InputStream,并将其传递给ImageIO。read()。

Blob blob = resultSet.getBlob(index);
InputStream stream = blob.getBinaryStream(0, blob.length());
BufferedImage image = ImageIO.read(stream);
沈皓君
2023-03-14

ImageIcon具有构造函数,您可以在其中传递图像字节数组。

 public ImageIcon (byte[] imageData, String description)

所以你可以写这样的东西

ImageIcon ii=new ImageIcon(blob.getBytes(1, (int) blob.length()),"description");
 类似资料:
  • 问题内容: 我正在尝试显示上传到MySql中“存储”表的最后5张图像。我对PHP和数据库完全陌生,并且我一直在阅读有关如何做到这一点的很多文章,但是没有运气。 我可以一次存储和显示图片,但我希望能够拥有各种各样的画廊来显示最近上传的5张照片。 任何建议或帮助将不胜感激,谢谢! 附言:我知道将图片存储到这样的数据库时不赞成这样做,但是该项目仅用于实践。 index.php get.php 问题答案:

  • 问题内容: 嗨,我的数据库中有一个图像表。这些与细节一起存储为Blob,例如图像类型和名称。 我在显示图像时遇到问题,我得到的只是一个带有红色十字的白框。码: 谢谢 问题答案: 好吧,这是一个简短的答案。 检查您的Blob类型是否至少为MEDIUMBLOB,它能够存储高达16M的数据

  • 问题内容: 这个问题使我感到困惑,所以我认为我应该听专家的声音! 将图像上传到文件夹并仅保存指向mysql的链接是否更好,还是将img本身上传到Blob mysql字段中更好? 非常感谢你 问题答案: 我经常建立用于将图像存储在数据库中的系统,这样做有其优点和缺点。 优点: 您所有的数据都保存在一个地方,如果您迁移网站/数据库,图像将在那里 它更易于排序/删除/等… 由于您必须通过PHP脚本提供服

  • 问题内容: 已关闭 。这个问题需要细节或说明。它当前不接受答案。 想改善这个问题吗? 添加详细信息并通过编辑此帖子来澄清问题。 6年前关闭。 请给我查询在MySQL数据库中插入图像的查询。我是stackoverflow的新手,所以如果我的问题不符合要求,请忽略我。 问题答案: 有特定的原因为什么您不能存储对图像的引用,而不是实际图像? 图像很大,它们使数据库很大。SQL可能很痛苦(因为它不是面向对

  • 问题内容: 这个问题已经在这里有了答案 : 如何从MySQL数据库检索图像并显示在html标记中 (6个答案) 4年前关闭。 我试图显示存储在数据库的BLOB列中的图像; 我使用SELECT从数据库中获取数据,不对数据进行任何转换,并显示以下内容(从仅输出以下内容的脚本中显示): 请注意,chrome正在将内容大小显示为图像的正确大小以及正确的mime类型()。在头文件和ive检查数据库中的blo

  • 问题内容: 我试图基于驻留在数据库上的信息创建PDF。知道我需要从Java检索TIFF图像,该图像作为BLOB存储在mysql数据库中。而且我不知道该怎么做。我找到的示例显示了如何检索它并将其另存为文件(但保存在磁盘上),并且需要驻留在内存中。 表格名称:IMAGENES_REGISTROS BLOB字段名称:IMAGEN 有任何想法吗? 问题答案: 在您的通话中: 或者,您可以致电: 正如Bal