【问题标题】:Decode SVG image file (encoded as base64) in java在java中解码SVG图像文件(编码为base64)
【发布时间】:2016-04-04 07:20:13
【问题描述】:

我有 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);

但decodedByte 总是返回null。

PS:

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

【问题讨论】:

标签: java android svg base64


【解决方案1】:

(这是基于 Robert Longson 富有洞察力的 cmets。)

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

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

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

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

  • 使用第 3 方 SVG 库。有使用Picture 对象的示例和使用ImageView 子类的其他示例。调查选项并选择最符合您要求的选项。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多