- From: hfmanson <notifications@github.com>
- Date: Sat, 20 Apr 2024 03:33:19 -0700
- To: whatwg/dom <dom@noreply.github.com>
- Cc: Subscribed <subscribed@noreply.github.com>
- Message-ID: <whatwg/dom/issues/1281@github.com>
### What is the issue with the DOM Standard? Currently a `SVGSVGElement` can only be rendered in a HTML canvas by - serializing the containing document to a string - creating a blob out of it - convert the blob to an url - create an image element and assign the src property - adding an EventListener which draws the loaded image asynchronously. ```js const svgSource = `<?xml version="1.0" standalone="no"?> <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1 1" version="1.1"> <circle cx="0.5" cy="0.5" r="0.4" fill="red" stroke="blue" stroke-width="10"/> </svg> `; addEventListener("load", () => { function drawSVGSVGElement(svgsvgElement) { // serializing the containing document to a string const s = new XMLSerializer(); const str = s.serializeToString(svgsvgElement.ownerDocument); // creating a blob out of it let blob = new Blob([str], {type: 'image/svg+xml'}); let url = URL.createObjectURL(blob); // create an image element and assign the src property let image = document.createElement('img'); image.src = url; // adding an EventListener which draws the loaded image.*/ image.addEventListener('load', function () { const canvas = document.getElementById('canvas'); const context = canvas.getContext("2d"); context.drawImage(image, 0, 0); URL.revokeObjectURL(url); }); } function getSVGSVGElement() { const parser = new DOMParser(); const doc = parser.parseFromString(svgSource, "image/svg+xml"); return doc.documentElement; } const svgsvgElement = getSVGSVGElement(); drawSVGSVGElement(svgsvgElement); }, false); ``` If CanvasRenderingContext2D.drawImage() also allows to have an image parameter of type `SVGSVGElement` the code would be ```js function drawSVGSVGElement(svgsvgElement) { const canvas = document.getElementById('canvas'); const context = canvas.getContext("2d"); context.drawImage(svgsvgElement, 0, 0); } ``` -- Reply to this email directly or view it on GitHub: https://github.com/whatwg/dom/issues/1281 You are receiving this because you are subscribed to this thread. Message ID: <whatwg/dom/issues/1281@github.com>
Received on Saturday, 20 April 2024 10:33:23 UTC