Рендеринг SVG с внешними ссылками на Canvas
Я пытаюсь отрисовать SVG на холст, используя data: URI
а также canvas.drawImage()
, Это хорошо работает, за исключением того, что внешние изображения в SVG не включены в результирующий холст.
Пример HTML ( пример live jsFiddle):
<canvas id="canvas" width="400" height="400"></canvas>
<div id="container">
<svg id="mySVG" xmlns="http://www.w3.org/2000/svg" version="1.1">
<rect width="150" height="150" fill="rgb(0, 255, 0)" stroke-width="1" stroke="rgb(0, 0, 0)"/>
<image preserveAspectRatio="none" xmlns:xlink="http://www.w3.org/1999/xlink" xlink:href="http://upload.wikimedia.org/wikipedia/en/7/70/Example.png" width="80" height="80"></image>
</svg>
</div>
Javascript:
var canvas = document.getElementById('canvas'),
ctx = canvas.getContext('2d'),
svg = document.getElementById('container').innerHTML,
img = new Image();
img.onload = function () {
ctx.drawImage(img, 0, 0);
};
img.src = 'data:image/svg+xml,' + svg;
Я попытался установить время ожидания перед вызовом drawImage, надеясь, что это будет проблемой синхронизации, но, похоже, это не помогло. Есть идеи?
1 ответ
Решение
Это не проблема холста. Он не будет работать / будет выглядеть одинаково, даже если вы вообще не используете холст и просто добавляете свой HTMLImageElement в DOM. увидеть:
var svg = document.getElementById('container').innerHTML,
img = new Image();
img.onload = function () {
document.body.appendChild(img); // img does not contain Wikipedia image
};
img.src = 'data:image/svg+xml,' + svg;