生成要在数据 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 字符串的主要内容,如果未能解决你的问题,请参考以下文章

将图像数据URI(base64)设置为画布背景

使用 typescript 使用 data-uri 将图像转换为 base64

将 byte[] 转换为数据 URI 的 Base64 字符串

Request-URI Too Large 错误出现[使用 base64 编码图像并发送到 php 时]

从 iOS 照片库 uri 中获取 base64 照片

在 iOS 上使用 Phonegap 将图像转换为 Base64 字符串