บทนำ
การนำ SVG มาวาดบน Canvas ต้องใช้วิธีแปลง SVG เป็น Image ก่อน โดยใช้ <foreignObject> และ Blob URL
ขั้นตอนหลัก
- สร้าง SVG string ที่มี
<foreignObject>ครอบ HTML - สร้าง Blob จาก SVG string ด้วย MIME type
image/svg+xml - สร้าง Object URL จาก Blob
- โหลดเป็น Image แล้ววาดบน Canvas ด้วย
drawImage()
ตัวอย่างโค้ด
<!DOCTYPE html>
<html>
<head>
<title>SVG on HTML Canvas</title>
</head>
<body>
<canvas id="myCanvas" style="border:2px solid green;" width="300" height="300"></canvas>
<script>
var canvas = document.getElementById('myCanvas');
var ctx = canvas.getContext('2d');
var data = '<svg xmlns="https://www.w3.org/2000/svg" width="300" height="200">' +
'<foreignObject width="100%" height="100%">' +
'<div xmlns="https://www.w3.org/1999/xhtml" style="font-size:50px">' +
'Simply Easy ' +
'<span style="color:blue;">Learning</span>' +
'</div>' +
'</foreignObject>' +
'</svg>';
var DOMURL = window.URL || window.webkitURL || window;
var img = new Image();
var svg = new Blob([data], {type: 'image/svg+xml'});
var url = DOMURL.createObjectURL(svg);
img.onload = function() {
ctx.drawImage(img, 25, 70);
DOMURL.revokeObjectURL(url);
};
img.src = url;
</script>
</body>
</html>
ข้อจำกัด
- ต้องมี CORS policy ที่เหมาะสม
- ฟอนต์อาจไม่แสดงถูกต้องหากไม่ได้ฝังไว้ใน SVG
- บางเบราว์เซอร์จำกัดขนาด Canvas