使用Java将图像转换为Base64

9

我需要将一个图像对象转换为base64对象,以便在客户端加载到<img>标签中。

然而,我似乎无法想出如何实现这一点。是否有人有一段代码可以轻松使用?

这是我用来将外部图像链接转换为图像对象的方法:

Image image = null;
URL url = new URL(request.getParameter("hdn_path"));
image = ImageIO.read(url);

我不确定我是否以正确的方式进行了这个问题。


https://dev59.com/oWw05IYBdhLWcg3wiyVJ#25109418 - xehpuk
这个回答解决了你的问题吗?Java - 将图像转换为Base64 - user12550812
@wowo,那个问题完全不同。 - Mark Rotteveel
3个回答

17

使用 Apache IOUtilsBase64

byte[] imageBytes = IOUtils.toByteArray(new URL("...")));
String base64 = Base64.getEncoder().encodeToString(imageBytes);

6
  • 使用ImageIO.write()进行编写。
  • ByteArrayOutputStream将字节数组包装为输出流,以便使用它。
  • 使用DatatypeConverter将字节数组转换为base64字符串,在核心Java自6以来,不需要额外的库

例子

ByteArrayOutputStream output = new ByteArrayOutputStream();
ImageIO.write(image, "png", output);
DatatypeConverter.printBase64Binary(output.toByteArray());

5

被接受的答案 从URL读取文件,如果有人想要通过从文件系统中读取图像来进行Base64编码,则可以使用下面的代码片段。

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Base64;
import org.apache.commons.io.IOUtils;

public String img2Text(){
    String base64="";
    try{
        InputStream iSteamReader = new FileInputStream("featured-700x467.png");
        byte[] imageBytes = IOUtils.toByteArray(iSteamReader);
        base64 = Base64.getEncoder().encodeToString(imageBytes);
        System.out.println(base64);
    }catch(Exception e){
        e.printStackTrace();
    }
    return "data:image/png;base64,"+base64;
}

返回的base64文本可以在HTML页面中使用,例如以下示例

<!DOCTYPE html>
<html>
<body>

<img src="data:image/png;base64,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
" alt="Smiley face" width="42" height="42">

</body>
</html>


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接