gpt4 book ai didi

java - 使用Java以二进制格式将图像存储在数据库中

转载 作者:行者123 更新时间:2023-12-02 00:48:50 25 4
gpt4 key购买 nike

我正在解决我的项目并遇到了一些问题,我搜索了它,但找不到有意义的完整学习资源,我需要的是使用我的 Java 程序将图像存储在 SQL Server 数据库中,并且需要该返回检索时,图像尺寸不大,范围在 30 到 50 K 之间,我可以使用 toolKit 中的 getImage() 方法从磁盘加载图像

Image imm = Toolkit.getDefaultToolkit().getImage("URl");

,但我不知道如何将该图像转换为二进制格式并存储在数据库中,然后从数据库检索。我想将其存储在 VarBinary 中,通过查看几个站点,我发现 SQL Server 中的图像类型很快就会退役。

最佳答案

虽然在数据库中存储非常大的二进制对象不是一个好主意,但 Microsoft 研究论文“To BLOB or Not To BLOB: Large Object Storage in a Database or a Filesystem" 指出,如果对象大小小于 256K,这是一种有效的方法。所以听起来您已经找到了甜蜜用于存储 30K 图像的数据库。

您可以使用以下方法从 URL 将图像加载为缓冲图像:

BufferedImage imm = ImageIO.read(url);

然后将其转换为字节数组:

byte[] immAsBytes = 
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//use another encoding if JPG is innappropriate for you
ImageIO.write(imm, "jpg", baos );
baos.flush();
byte[] immAsBytes = baos.toByteArray();
baos.close();

然后存储字节数组as recommended by this article作为数据库中的 VARBINARY。在 JDBC 代码中,您应该将字节数组包装在 ByteArrayInputStream 中,并将PreparedStatement 参数设置为 BinaryStream:

PreparedStatement pstmt = commection.prepareStatement("INSERT INTO IMAGES (image) VALUES(?)");
ByteArrayInputStream bais = new ByteArrayInputStream(immAsBytes);
pstmt.setBinaryStream(1, bais, immAsBytes.length);
pstmt.executeUpdate();
pstmt.close();

要从数据库中获取图像,请使用 ResultStatement.getBlob():

Blob immAsBlob = rs.getBlob();
byte[] immAsBytes = immAsBlob.getBytes(1, (int)immAsBlob.length()));

最后,将字节数组转换为 BufferedImage 并对其执行一些操作:

InputStream in = new ByteArrayInputStream(immAsBytes);
BufferedImage imgFromDb = ImageIO.read(in);

关于java - 使用Java以二进制格式将图像存储在数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57875506/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com