【问题标题】:Java BLOB to image fileJava BLOB 到图像文件
【发布时间】:2018-10-29 20:23:52
【问题描述】:

我有一个从 MySQL 数据库中检索到的BLOB,如下所示:

Blob imageBlob;
while (rs.next()) {
    imageBlob= rs.getBlob("face");
}

之后我的imageBlob 是这样的:data:image/png;base64,iVBORw0KGgoAAAANSUhE................

我一直在用谷歌搜索,但我没有找到任何解决我的问题的方法:如何从这个 BLOB 创建一个图像文件并将其保存在磁盘上?

【问题讨论】:

标签: java image blob


【解决方案1】:

imageBlob 存储图像数据的 base64 表示。要将其存储到磁盘上,您需要将该 base64 表示解码为原始二进制格式表示。

// Imports required
import java.util.Base64
import java.io.ByteArrayInputStream;
import java.io.File;
import javax.imageio.ImageIO;

String imageData = "data:image/png;base64,iVBORw0KGgoAAAANSUhE....";
String base64Data = imageData.split(",")[1]

byte[] decodedBytes = Base64.getDecoder().decode(base64Data);
ByteArrayInputStream bis = new ByteArrayInputStream(decodedBytes);
BufferedImage image = ImageIO.read(bis);

File outputFile = new File("output.png");
ImageIO.write(image, "png", outputFile);    

【讨论】:

  • 完美且易于理解,非常感谢!
【解决方案2】:

首先将 Blob 转换为 BuffededImage:

Blob aBlob = rs.getBlob("Photo");
InputStream is = aBlob.getBinaryStream(0, aBlob.length());
BufferedImage image=ImageIO.read(is);

然后将BufferedImage转为Image:

try {
    // Retrieve Image
    File outputfile = new File("saved.png");
    ImageIO.write(image, "png", outputfile); // Write the Buffered Image into an output file
    Image image  = ImageIO.read(new File("saved.png")); // Opening again as an Image
} catch (IOException e) {
    ...
}

【讨论】:

  • 这太复杂了,它只是一堆可以写入磁盘的字节。
  • @RobinGreen,我知道这不是一个好的解决方案,但它是可行的。
猜你喜欢
  • 2018-08-11
  • 2015-07-29
  • 2018-11-16
  • 1970-01-01
  • 1970-01-01
  • 2011-03-25
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
相关资源
最近更新 更多