首页  >  文章  >  数据库  >  如何将 BufferedInputStream 从数据库转换为 BufferedImage?

如何将 BufferedInputStream 从数据库转换为 BufferedImage?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-11-13 09:47:02146浏览

How to Convert a BufferedInputStream from a Database to a BufferedImage?

将 BufferedInputStream 转换为图像

问题:

如何转换从数据库检索的 BufferedInputStream 对象,到 BufferedImage 中?现有代码返回空图像。

解决方案:

  1. 验证 BufferedInputStream 是否包含有效图像。将其保存到文件中,然后将其作为 BufferedImage 读回进行确认。
  2. 确保在获取字节时使用正确的 Blob 长度。对于 H2 数据库,长度返回为 long,但 Blob#getBytes 需要 int。
  3. 或者,使用 Blob#getBinaryStream 而不是 Blob#getBytes。如果数据库不在内存中存储 Blob 内容,这可能是必要的。

示例:

以下 Java 代码使用 Blob#getBinaryStream 读取图像从数据库中获取并将其转换为 BufferedImage:

import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.sql.Blob;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.imageio.ImageIO;

public class ImageDatabaseHelper {

    private Connection con;

    public BufferedImage loadImage(int imageId) throws IOException, SQLException {

        PreparedStatement stmt = null;
        ResultSet rs = null;
        BufferedImage image = null;

        try {

            stmt = con.prepareStatement("select image from images where id = ?");
            stmt.setInt(1, imageId);
            rs = stmt.executeQuery();

            while (rs.next()) {

                Blob blob = rs.getBlob(1);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                try (ByteArrayInputStream bais = new ByteArrayInputStream(blob.getBinaryStream())) {
                    ImageIO.read(bais).writeTo(baos);
                }
                image = ImageIO.read(new ByteArrayInputStream(baos.toByteArray()));
            }

        } finally {
            try {
                rs.close();
            } catch (Exception e) {
            }
            try {
                stmt.close();
            } catch (Exception e) {
            }
        }

        return image;
    }

}

以上是如何将 BufferedInputStream 从数据库转换为 BufferedImage?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn