生成要在数据 URI 中使用的图像的 base64 字符串
Posted
技术标签:
【中文标题】生成要在数据 URI 中使用的图像的 base64 字符串【英文标题】:Generate base64 string of an image to use in data URI 【发布时间】:2013-05-07 02:48:21 【问题描述】:如何生成图片的base64字符串用于数据URI?
我有一个 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 格式?我目前的解决方法是只替换字符,但我宁愿使用库。
【问题讨论】:
【参考方案1】:根据Base64.encodeBase64URLSafeString 方法的javadoc,这似乎是设计使然。查看我提供的链接,它在 javadoc 中说明了这一点:
使用 base64 算法的 URL 安全变体对二进制数据进行编码,但不对输出进行分块。 网址安全变体发出 - 和 _ 而不是 + 和 / 字符。注意:没有添加填充。
因此,您要确保使用 url-unsafe 变体。这就是称为encodeBase64 的方法。请改用此方法:
Base64.encodeBase64(imageFile)
【讨论】:
【参考方案2】: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);
【讨论】:
以上是关于生成要在数据 URI 中使用的图像的 base64 字符串的主要内容,如果未能解决你的问题,请参考以下文章
使用 typescript 使用 data-uri 将图像转换为 base64
将 byte[] 转换为数据 URI 的 Base64 字符串