How to get image data url in JavaScript?

To obtain an image data URL in JavaScript, you can use several approaches depending on your source. The most common methods involve the Canvas API's toDataURL() method and the FileReader API for uploaded files.

Using Canvas toDataURL() Method

The toDataURL() method converts canvas content into a base64-encoded data URL. By default, it creates a PNG image, but you can specify JPEG format and quality.

canvas.toDataURL();                    // PNG format (default)
canvas.toDataURL('image/jpeg');       // JPEG format
canvas.toDataURL('image/jpeg', 0.8);  // JPEG with 80% quality

Example: Converting File Upload to Data URL

This example shows how to get an image data URL from a file upload and display it on a canvas:

<!DOCTYPE html>
<html>
<head>
   <title>Get Image Data URL</title>
</head>
<body>
   <input type="file" accept="image/*" onchange="readURL(this);" />
   <br><br>
   <button id="toggleCanvas" onclick="toggleCanvas()">Hide Canvas</button>
   <button id="toggleDataUrl" onclick="toggleDataUrl()">Hide Data URL</button>
   <br><br>
   <textarea id="dataUrl" rows="4" cols="100" placeholder="Data URL will appear here"></textarea>
   <br><br>
   <canvas id="myCanvas"></canvas>

   <script>
      function readURL(input) {
         if (input.files && input.files[0]) {
            var reader = new FileReader();
            reader.addEventListener("load", function() {
               var img = new Image();
               var dataUrl = reader.result;
               img.src = dataUrl;
               
               // Display the data URL in textarea
               document.getElementById("dataUrl").value = dataUrl;
               
               img.onload = function() {
                  var canvas = document.getElementById("myCanvas");
                  var ctx = canvas.getContext("2d");
                  canvas.width = img.width;
                  canvas.height = img.height;
                  ctx.drawImage(img, 0, 0);
                  
                  // Get canvas data URL
                  var canvasDataUrl = canvas.toDataURL('image/jpeg', 0.8);
                  console.log("Canvas Data URL:", canvasDataUrl.substring(0, 50) + "...");
               };
            }, false);
            reader.readAsDataURL(input.files[0]);
         }
      }

      function toggleCanvas() {
         var canvas = document.getElementById("myCanvas");
         var btn = document.getElementById("toggleCanvas");
         if (canvas.style.display === "none") {
            canvas.style.display = "block";
            btn.textContent = "Hide Canvas";
         } else {
            canvas.style.display = "none";
            btn.textContent = "Show Canvas";
         }
      }

      function toggleDataUrl() {
         var textarea = document.getElementById("dataUrl");
         var btn = document.getElementById("toggleDataUrl");
         if (textarea.style.display === "none") {
            textarea.style.display = "block";
            btn.textContent = "Hide Data URL";
         } else {
            textarea.style.display = "none";
            btn.textContent = "Show Data URL";
         }
      }
   </script>
</body>
</html>

Creating Data URL from Canvas Drawing

You can also create a data URL from programmatically drawn canvas content:

// Create canvas and draw something
var canvas = document.createElement('canvas');
var ctx = canvas.getContext('2d');
canvas.width = 200;
canvas.height = 100;

// Draw a simple rectangle
ctx.fillStyle = '#4CAF50';
ctx.fillRect(0, 0, 200, 100);
ctx.fillStyle = 'white';
ctx.font = '16px Arial';
ctx.fillText('Hello Canvas!', 50, 50);

// Get data URL
var dataUrl = canvas.toDataURL('image/png');
console.log('Data URL length:', dataUrl.length);
console.log('Data URL preview:', dataUrl.substring(0, 50) + '...');

Security Considerations

When using toDataURL(), images drawn on the canvas must be from the same origin or served with proper CORS headers. Cross-origin images will cause a security exception when calling toDataURL().

Data URL Format Options

Format MIME Type Quality Parameter Use Case
PNG image/png Not supported Lossless, transparency support
JPEG image/jpeg 0.0 to 1.0 Smaller file size, no transparency
WebP image/webp 0.0 to 1.0 Modern format, better compression

Conclusion

Use canvas.toDataURL() to convert canvas content to data URLs, and FileReader.readAsDataURL() for file uploads. Choose the appropriate image format and quality based on your needs.

Updated on: 2026-03-15T20:00:58+05:30

6K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements