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

时间:2013-05-13 06:10:27

标签: java html image base64 data-uri

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

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

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

Base64.encodeBase64URLSafeString(imageFile)

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

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

2 个答案:

答案 0 :(得分:4)

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

  

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

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

Base64.encodeBase64(imageFile)

答案 1 :(得分: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);  
    }
}