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

标签 java android svg base64

我有编码为 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/

相关文章:

android - 错误 :Annotation processor '__gen.AnnotationProcessorWrapper_debug_android_databinding_annotationprocessor_ProcessDataBinding' not found

android - 类型 android.support.v4.app.Fragment 无法解析。它是从所需的 .class 文件间接引用的,Facebook

javascript - Canvas drawImage onload函数不起作用

javascript - 如何使用 d3.js 根据数据确定 SVG 形状

队列中包含 3 个元素的 Java PriorityQueue 行为

java - 从 java 代码调用 ruby​​ 脚本

java - 如何解决 Stanford Charniak Parser 依赖

android - 需要帮助在线性布局中将 EditText 居中

Python lxml XPATH——查找特定节点的所有父节点的属性

java - 实现 Fragment 到 Activity 的通信而不直接在 Activity 中实现接口(interface)