在Java中解码以Base64编码的SVG图像文件

5

我有一个以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。

PS:

  • 此代码适用于jpeg图像。
  • 如果base64字符串包含base64前缀("data:image/svg+xml;base64,"或"data:image/jpeg;base64,"),decodedByte始终返回null。
  • base64字符串是正确的(在HTML和其他在线base64工具中运行良好)

Android支持三种位图文件格式:.png(首选)、.jpg(可接受)和.gif(不鼓励使用)。SVG是矢量格式,而不是位图格式。 - Robert Longson
请参考 https://dev59.com/fm865IYBdhLWcg3wSMkw 了解如何在Android上使用SVG。 - Robert Longson
1个回答

0

(这是基于Robert Longson的深刻评论。)

你的问题与base64编码无关,它比那更根本。

你目前采取的方法行不通,因为BitmapFactory只会解码位图文件格式。而Bitmap类只能表示PNG、JPG和GIF格式;请参阅javadoc。(SVG是矢量图形格式,不是位图格式。)

第二个问题是,Android目前不支持在ImageView中原生支持SVG。所以你有两个选择:

  • 使用嵌入式浏览器窗口显示SVG图形。Android 3+默认浏览器支持SVG。(Android 2浏览器不支持,但有可能有解决方法。)

  • 使用第三方SVG库。有一些示例使用Picture对象,还有一些使用ImageView的子类。调查各种选项,选择最符合你要求的选项。

有关这些替代方案的更多详细信息,请阅读各种答案:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接