在java中解码SVG图像文件(编码为base64)

Bok*_*hak 7 java base64 svg android

我有SVG文件编码为base64,我想用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);
Run Code Online (Sandbox Code Playgroud)

但decodeByte总是返回null.

PS:

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

Ste*_*n C 0

(这是基于罗伯特·朗森的富有洞察力的评论。)

您的问题与base64编码无关。它比这更根本。

您当前采用的方法不起作用,因为BitmapFactory只能解码位图文件格式。该类Bitmap仅表示 PNG、JPG 和 GIF 格式;请参阅javadoc。(SVG 是矢量图形格式,而不是位图格式。)

第二个问题是 Android 目前没有对ImageView. 所以你有两种选择:

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

  • 使用第 3 方 SVG 库。有些示例使用Picture对象,而其他示例则使用 的子类ImageView。研究选项并选择最能满足您要求的选项。

有关替代方案的更多详细信息,请阅读以下问题的各种答案: