Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> HTML

วิธีวาดไฟล์ SVG บน HTML5 Canvas


บทนำ

การนำ SVG มาวาดบน Canvas ต้องใช้วิธีแปลง SVG เป็น Image ก่อน โดยใช้ <foreignObject> และ Blob URL

ขั้นตอนหลัก

  1. สร้าง SVG string ที่มี <foreignObject> ครอบ HTML
  2. สร้าง Blob จาก SVG string ด้วย MIME type image/svg+xml
  3. สร้าง Object URL จาก Blob
  4. โหลดเป็น 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