数据 uri 中的 svg 未呈现
svg in data uri not rendered
我尝试使用动态生成的 svg (example) 为 bing 地图创建一个 svg 图钉。不幸的是,它无法在地图上正确呈现图钉。我四处挖掘,发现 bing 映射 API 正在将 src
设置为 base64 编码图像。
所以我尝试将图像源复制到js fiddle 中,看看是bing 地图API 还是浏览器有问题。
它适用于
这样的简单图像
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
<circle id="circle" cx="25" cy="25" r="25" />
</svg>
但是稍微复杂一点的图片没有渲染出来
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
<defs>
<circle id="circle" cx="25" cy="25" r="25" />
</defs>
<clipPath id="clip"></clipPath>
<image xlink:href="https://www.gravatar.com/avatar/08b73d0a58fc120a8cc8dc561d83b3d6.jpg?s=50&d=mm" x="0" y="0" height="50" width="50" />
</svg>
JS Fiddle: https://jsfiddle.net/w1yn9Lo8/6/
如果我将它们直接粘贴到 HTML 中,两个图像都可以很好地渲染。这里有什么问题?
当您使用 SVG 文件作为数据 URI 时,您不能有任何外部引用,因此您必须先将 jpg 编码为数据 uri,然后再将包装 SVG 文件编码为数据 uri。
问题是图钉的 SVG 内容无法绘制未加载的图像,即使您在 SVG 中使用内部 foreignObject。
我会使用 canvas 而不是 SVG。您可以在其中使用所有 canvas 原语。
我的解决方案是:Bing Maps API v8 - pushpin SVG URI image
- 将图像预加载到对象(对象数组)
- 在canvas中绘制图像and/or另一个图元并在图钉
中使用canvas
我尝试使用动态生成的 svg (example) 为 bing 地图创建一个 svg 图钉。不幸的是,它无法在地图上正确呈现图钉。我四处挖掘,发现 bing 映射 API 正在将 src
设置为 base64 编码图像。
所以我尝试将图像源复制到js fiddle 中,看看是bing 地图API 还是浏览器有问题。 它适用于
这样的简单图像<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
<circle id="circle" cx="25" cy="25" r="25" />
</svg>
但是稍微复杂一点的图片没有渲染出来
<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
<defs>
<circle id="circle" cx="25" cy="25" r="25" />
</defs>
<clipPath id="clip"></clipPath>
<image xlink:href="https://www.gravatar.com/avatar/08b73d0a58fc120a8cc8dc561d83b3d6.jpg?s=50&d=mm" x="0" y="0" height="50" width="50" />
</svg>
JS Fiddle: https://jsfiddle.net/w1yn9Lo8/6/
如果我将它们直接粘贴到 HTML 中,两个图像都可以很好地渲染。这里有什么问题?
当您使用 SVG 文件作为数据 URI 时,您不能有任何外部引用,因此您必须先将 jpg 编码为数据 uri,然后再将包装 SVG 文件编码为数据 uri。
问题是图钉的 SVG 内容无法绘制未加载的图像,即使您在 SVG 中使用内部 foreignObject。
我会使用 canvas 而不是 SVG。您可以在其中使用所有 canvas 原语。
我的解决方案是:Bing Maps API v8 - pushpin SVG URI image
- 将图像预加载到对象(对象数组)
- 在canvas中绘制图像and/or另一个图元并在图钉 中使用canvas