无法导入带有“<image>”标签的 svg

Cannot import svg with '<image>' tag

我有一张png图片。我在 Adob​​e Illustrator 中打开它并在不更改默认配置的情况下将其保存为 svg:

这给了我这个 svg 文件:

<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 18.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  -->
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
     viewBox="0 0 100 100" enable-background="new 0 0 100 100" xml:space="preserve">
<image overflow="visible" width="714" height="714" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAsoAAALKCAYAAAArlndAAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJ
bWFnZVJlYWR5ccllPAAAA2ppVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdp
bj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6
...
ex8pzU1wT+bf4YnI2vz8uvwzq/PX6ueW58dHNvPztf4ZAGzZ/wswAPds0/tWAII4AAAAAElFTkSu
QmCC" transform="matrix(1 0 0 1 -307 -307)">
</image>
</svg>

当我尝试在 android studio 中导入 svg 文件时出现此错误:

Empty preview image!
Exception while parsing XML file:
Premature end of file.

谁能帮我解决这个问题?我导入了其他具有 <path> 元素的 svg 文件,它们运行良好。

在将 png 转换为 svg 时,我们需要遵循一些规则。所有转换器都无法在其默认配置下正常工作。就我而言,我找到了最好的转换器网站,它会在转换过程中为您提供预览图像以进行确认,这将要求免费注册,然后您可以下载您的 svg 文件。

Convert PNG to SVG - 这需要单点注册并且每天只允许通过一封电子邮件发送 2 个令牌

备选方案: Reference2 Reference3

生成 svg 后,使用以下工具将 svg 转换为矢量可绘制对象(这是必要的,因为不知何故 android studio 无法导入随机转换器生成的所有格式或配置和样式)

Generate Vector Drawable from SVG

经过以上 2 个步骤后,您将拥有完美的矢量绘图,您可以轻松地将其复制到绘图中并加载到您需要的任何位置。

您的尝试毫无意义。将 PNG 等位图图像单独放入矢量文件(Illustrator 或 SVG)中并没有多大意义。它不会神奇地将位图变成矢量图。如果您想在应用中显示 PNG,只需使用 ImageView 并将其指向 PNG 资源即可。

另一件需要知道的事情是 Android Studio SVG 到 VectorDrawable 转换器不支持 <image> 元素。支持的 SVG 元素列表可以在另一个问题的答案中找到:

Which SVG elements are supported by Android studio and which are not?

我遇到了同样的问题。 正如 Paul LeBeau 所说,问题在于 SVG 文件中包含矢量而不是位图(图像),因此 Android Studio 无法识别该文件。

我找到的解决方案是使用“图像描摹”和“扩展”将您拥有的图像转换为矢量,以便 Illustrator 将其转换为矢量文件