我有编码为 base64 的 SVG 文件,我想用 ImageView 显示图像。 这是我尝试过的:
// imageBase64 is string that represents the SVG image encoded as base64
byte[] decodedString = Base64.decode(imageBase64, Base64.DEFAULT);
Bitmap decodedByte = BitmapFactory.decodeByteArray(decodedString, 0, decodedString.length);
但 decodedByte 总是返回 null。
附言:
- 此代码适用于 jpeg 图像。
- 如果base64字符串包含base64前缀 ("data:image/svg+xml;base64,"或 "data:image/jpeg;base64,) decodedByte 也总是返回 null
- base64 字符串是正确的(它在 HTML 和其他 base64 中工作良好 在线工具)
最佳答案
(这是基于 Robert Longson 富有洞察力的评论。)
您的问题与 base64 编码无关。它比这更基本。
您目前采用的方法不会奏效,因为 BitmapFactory
只会解码位图文件格式。 Bitmap
类将只表示 PNG、JPG 和 GIF 格式;查看javadoc . (SVG 是 vector 图形格式,不是位图格式。)
第二个问题是 Android 目前在 ImageView
中没有对 SVG 的原生支持。所以你有两个选择:
使用嵌入式浏览器窗口显示 SVG 图形。 Android 3+ 默认浏览器支持 SVG。 (Android 2 浏览器没有,尽管有可能的解决方法。)
使用第 3 方 SVG 库。有一些示例使用
Picture
对象,还有一些示例使用ImageView
的子类。调查选项并选择最符合您要求的选项。
有关备选方案的更多详细信息,请阅读以下问题的各种答案:
关于java - 在java中解码SVG图像文件(编码为base64),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34527452/