SVG图像是纯粹矢量的,还是可以将位图图像组合成SVG图像?如何将变换应用于位图图像(透视图,映射等)?
编辑:通过链接参考,图像可能包含在SVG中。参见http://www.w3.org/TR/SVG/struct.html#ImageElement。我的问题是,实际上是否可以将位图图像包含在svg中,以便svg图像是自包含的。否则,无论何时显示svg图像,都必须遵循链接并下载图像。显然.svg文件只是xml文件。
SVG图像是纯粹矢量的,还是可以将位图图像组合成SVG图像?如何将变换应用于位图图像(透视图,映射等)?
编辑:通过链接参考,图像可能包含在SVG中。参见http://www.w3.org/TR/SVG/struct.html#ImageElement。我的问题是,实际上是否可以将位图图像包含在svg中,以便svg图像是自包含的。否则,无论何时显示svg图像,都必须遵循链接并下载图像。显然.svg文件只是xml文件。
Answers:
是的,您可以引用<image>
元素中的任何图像。您可以使用数据uri来使svg完全独立。一个例子:
<image width="100" height="100" xlink:href="data:image/png;base64,...">
点是您要添加编码的base64数据的位置,支持svg的矢量图形编辑器通常具有用于保存嵌入图像的选项。否则,周围有很多工具可用于与base64之间进行编码。
这是svg测试套件的完整示例。
xlink
原样声明名称空间:xmlns:xlink="http://www.w3.org/1999/xlink"
没有它,某些浏览器/查看器可能看不到您的图像
width
并且height
在svg image标签中,Chrome浏览器也会显示此图像。但是,如果省略这些属性,则Firefox和IE不会显示图像。因此,请确保指定它们!
我在这里张贴了一个小提琴,在HTML页面内显示了数据,嵌入SVG的远程和本地图像:
<!DOCTYPE html>
<html>
<head>
<title>SVG embedded bitmaps in HTML</title>
<style>
body{
background-color:#999;
color:#666;
padding:10px;
}
h1{
font-weight:normal;
font-size:24px;
margin-top:20px;
color:#000;
}
h2{
font-weight:normal;
font-size:20px;
margin-top:20px;
}
p{
color:#FFF;
}
svg{
margin:20px;
display:block;
height:100px;
}
</style>
</head>
<body>
<h1>SVG embedded bitmaps in HTML</h1>
<p>The trick appears to be ensuring the image has the correct width and height atttributes</p>
<h2>Example 1: Embedded data</h2>
<svg id="example1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="0" width="5" height="5" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
</svg>
<h2>Example 2: Remote image</h2>
<svg id="example2" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="0" width="275" height="95" xlink:href="http://www.google.co.uk/images/srpr/logo3w.png" />
</svg>
<h2>Example 3: Local image</h2>
<svg id="example3" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image x="0" y="0" width="136" height="23" xlink:href="/img/logo.png" />
</svg>
</body>
</html>
您可以使用数据URI提供图像数据,例如:
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<image width="20" height="20" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg=="/>
</svg>
该图像将经历所有正常的svg转换。
但是此技术有缺点,例如,图像将不会被浏览器缓存
您可以使用data:
URL嵌入图像的Base64编码版本。但这不是很有效,也不建议嵌入大图像。有什么原因链接到另一个文件不可行?
也可以包含位图。我认为您也可以对此进行转换。