How to capture HTML Canvas as gif/jpg/png/pdf with JavaScript?

We can use the canvas.toDataURL() method to capture HTML canvas content as different image formats like PNG, JPEG, WebP, and GIF. This method converts the canvas drawing into a data URL that can be saved or displayed as an image.

Syntax

canvas.toDataURL(type, encoderOptions)

Parameters

type (optional): The image format. Defaults to "image/png"

encoderOptions (optional): Quality setting for lossy formats (0-1)

Capture HTML Canvas as PNG

PNG format provides lossless compression and supports transparency. Set the type to image/png:

<!DOCTYPE html>
<html>
<body>
   <canvas id="myCanvas" width="300" height="170" style="border:2px solid #d3d3d3;"></canvas>
   <button onclick="downloadPNG()">Download as PNG</button>
   
   <script>
      window.onload = function() {
         var canvas = document.getElementById("myCanvas");
         var context = canvas.getContext("2d");
         
         // Draw a red rectangle
         context.fillStyle = "red";
         context.fillRect(50, 50, 100, 100);
         
         // Draw some text
         context.fillStyle = "blue";
         context.font = "20px Arial";
         context.fillText("Sample Canvas", 70, 40);
      }
      
      function downloadPNG() {
         var canvas = document.getElementById("myCanvas");
         var dataURL = canvas.toDataURL("image/png");
         
         var link = document.createElement('a');
         link.download = 'canvas.png';
         link.href = dataURL;
         link.click();
      }
   </script>
</body>
</html>

Capture HTML Canvas as JPEG

JPEG format is ideal for photographs but doesn't support transparency. You can specify quality (0-1):

<!DOCTYPE html>
<html>
<body>
   <canvas id="jpegCanvas" width="300" height="170" style="border:2px solid #d3d3d3;"></canvas>
   <button onclick="downloadJPEG()">Download as JPEG</button>
   
   <script>
      window.onload = function() {
         var canvas = document.getElementById("jpegCanvas");
         var context = canvas.getContext("2d");
         
         // Create gradient background
         var gradient = context.createLinearGradient(0, 0, 300, 170);
         gradient.addColorStop(0, "lightblue");
         gradient.addColorStop(1, "darkblue");
         context.fillStyle = gradient;
         context.fillRect(0, 0, 300, 170);
         
         // Draw circle
         context.fillStyle = "yellow";
         context.beginPath();
         context.arc(150, 85, 40, 0, 2 * Math.PI);
         context.fill();
      }
      
      function downloadJPEG() {
         var canvas = document.getElementById("jpegCanvas");
         var dataURL = canvas.toDataURL("image/jpeg", 0.9); // 90% quality
         
         var link = document.createElement('a');
         link.download = 'canvas.jpg';
         link.href = dataURL;
         link.click();
      }
   </script>
</body>
</html>

Capture HTML Canvas as WebP

WebP provides better compression than JPEG and PNG with support for both lossy and lossless compression:

<!DOCTYPE html>
<html>
<body>
   <canvas id="webpCanvas" width="300" height="170" style="border:2px solid #d3d3d3;"></canvas>
   <button onclick="downloadWebP()">Download as WebP</button>
   
   <script>
      window.onload = function() {
         var canvas = document.getElementById("webpCanvas");
         var context = canvas.getContext("2d");
         
         // Draw multiple shapes
         context.fillStyle = "green";
         context.fillRect(20, 20, 80, 60);
         
         context.fillStyle = "orange";
         context.beginPath();
         context.arc(200, 50, 30, 0, 2 * Math.PI);
         context.fill();
         
         context.fillStyle = "purple";
         context.beginPath();
         context.moveTo(150, 120);
         context.lineTo(200, 150);
         context.lineTo(100, 150);
         context.fill();
      }
      
      function downloadWebP() {
         var canvas = document.getElementById("webpCanvas");
         if (canvas.toDataURL("image/webp").indexOf("image/webp") === 5) {
            var dataURL = canvas.toDataURL("image/webp", 0.8);
            
            var link = document.createElement('a');
            link.download = 'canvas.webp';
            link.href = dataURL;
            link.click();
         } else {
            alert("WebP not supported in this browser");
         }
      }
   </script>
</body>
</html>

Comparison of Image Formats

Format File Size Quality Transparency Browser Support
PNG Large Lossless Yes Excellent
JPEG Small Lossy No Excellent
WebP Very Small Both Yes Modern browsers

Browser Compatibility

All modern browsers support PNG and JPEG export. WebP support varies:

// Check WebP support
function supportsWebP() {
   var canvas = document.createElement('canvas');
   return canvas.toDataURL('image/webp').indexOf('image/webp') === 5;
}

console.log('WebP supported:', supportsWebP());

Conclusion

Use canvas.toDataURL() to export canvas content as images. Choose PNG for graphics with transparency, JPEG for photographs, and WebP for the best compression when browser support allows.

Updated on: 2026-03-15T23:19:00+05:30

3K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements