3

如何生成要在数据 URI 中使用的图像的 base64 字符串?

我有一个 Base64 图像编码问题,希望有人能提供帮助。我正在尝试在我的网页中使用数据 uri(即<img src="data:image/png;base64,iVBORw..."/>使用org.apache.commons.codec.binary.Base64v1.8 生成 png 图像的 base64 字符串。

要生成我使用的 base64 字符串:

Base64.encodeBase64URLSafeString(imageFile)

问题是浏览器无法渲染图像。我将这个生成的字符串与一个有效的字符串进行了比较,我注意到不同之处在于 Apache Base64 版本具有“_”和“-”字符而不是“/”和“+”。从互联网上我看到有不同的 Base64 格式,所以我认为 Apache 的实现与浏览器不兼容。

所以我想知道是否有一个库可以实现适合我的目的的 base64 格式?我目前的解决方法是只替换字符,但我宁愿使用库。

4

2 回答 2

4

根据Base64.encodeBase64URLSafeString方法的 javadoc,这似乎是设计使然。查看我提供的链接,它在 javadoc 中说明了这一点:

使用 base64 算法的 URL 安全变体对二进制数据进行编码,但不分块输出。url-safe 变体发出 - 和 _ 而不是 + 和 / 字符。注意:没有添加填充。

因此,您要确保使用 url-unsafe 变体。这就是称为encodeBase64的方法。请改用此方法:

Base64.encodeBase64(imageFile)
于 2013-05-13T06:16:49.413 回答
1
class ConvertToBase64 {

    public static void main(String[] args) throws Exception {
        byte[] b = "Ha".getBytes("UTF-8");
        System.out.println("bytes: " + b.length);
        javax.xml.bind.DatatypeConverter.printBase64Binary(b);  
    }
}
于 2013-05-13T06:15:20.043 回答