当前位置: 首页 > 知识库问答 >
问题:

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

闾丘淇
2023-03-14

我有一个编码为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图像。
  • 如果Bas64字符串包含Bas64前缀("data: Image/svg xml; Bas64,"或"data: Image/jpeg; Bas64,),则decdedByte也总是返回null
  • Bas64字符串是正确的(它在超文本标记语言和其他Bas64在线工具中工作良好)

共有1个答案

翟俊名
2023-03-14

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

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

您当前采用的方法行不通,因为BitmapFactory只能解码位图文件格式。<code>位图</code>类只表示PNG、JPG和GIF格式;请参见javadoc。(SVG是矢量图形格式,而不是位图格式。)

第二个问题是Android目前在<code>ImageView</code>中没有对SVG的本地支持。因此,您有两种选择:

>

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

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

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

    • Android上的SVG支持

  •  类似资料:
    • HTML and CSS allows you to embed external resources right into base using data:URL scheme. Usually, image conversion to base64 is done with external on-line services or third-party assets builder. HTM

    • 问题内容: 我一直在尝试处理将发布到nodeJS(和express框架)的图像保存到数据库中,并且遇到了一些麻烦。忽略所有的Web处理,我认为我已经将问题缩小到节点中base64编码发生的方式。我认为下面简化的示例应该可以工作,但是输出图像始终会损坏。 示例(1)在图像中加载(2)保存if()的副本,以确认节点可以正确读取文件。这始终有效。(3)拍摄图像,并对其内容进行base64编码,(4)然后

    • 问题内容: 我正在为Firefox / IE构建一个开放式搜索附加组件,并且该图像需要经过Base64编码,因此如何对我拥有的收藏夹图标进行64位编码? 我只熟悉PHP 问题答案: 据我记得,图像数据有一个xml元素。您可以使用此网站对文件进行编码(使用上载字段)。然后,只需将数据复制并粘贴到XML元素即可。 您也可以这样使用PHP来做到这一点: 使用Mozilla指南获取有关创建OpenSear

    • 我正在使用一个在线服务,它需要一个Base64中的映像。我已经完成了一个简单的表单,我可以上传一个图像,然后我的php将图像编码为base 64,如下所示: base64_encode(file_get_contents(_FILES图像]tmp_name); 然后,我将其传递到一个json数组中,另一个页面尝试用我的数据显示图像,但失败了(缺少图像图标),在Chrome控制台中出现错误: img

    • 使用它,我获得以下输出 为什么bufferedImage为空?