In cases you want to display a more personalized avatar for a user that hasn’t uploaded any image to his profile, Canvas might help you through its toDataURI() function. So, let’s see what this method is all about.
The HTMLCanvasElement.toDataURL() method returns a data URIs containing a representation of the image in the format specified by the type parameter (defaults to PNG). The returned image is in a resolution of 96 dpi.
- If the height or width of the canvas is 
0, the string"data:,"is returned. - If the requested type is not 
image/png, but the returned value starts withdata:image/png, then the requested type is not supported. - Chrome also supports the 
image/webptype. 
More info can be found on the MDN site.
Knowing that we can write a simple javascript function that takes some letters as parameters, we can generate a representation of the image as base64 encoding.
/**
 * Generate an avatar image from letters
 */
(function (w, d) {
  function AvatarImage(letters, size) {
    var canvas = d.createElement('canvas');
    var context = canvas.getContext("2d");
    var size = size || 60;
    // Generate a random color every time function is called
    var color =  "#" + (Math.random() * 0xFFFFFF << 0).toString(16);
    // Set canvas with & height
    canvas.width = size;
    canvas.height = size;
    // Select a font family to support different language characters
    // like Arial
    context.font = Math.round(canvas.width / 2) + "px Arial";
    context.textAlign = "center";
    // Setup background and front color
    context.fillStyle = color;
    context.fillRect(0, 0, canvas.width, canvas.height);
    context.fillStyle = "#FFF";
    context.fillText(letters, size / 2, size / 1.5);
    // Set image representation in default format (png)
    dataURI = canvas.toDataURL();
    // Dispose canvas element
    canvas = null;
    return dataURI;
  }
  w.AvatarImage = AvatarImage;
})(window, document);
Then, when the page loads, we shall transform all images with an extra “letter” parameter like this one:
<img width=”60″ height=”60″ letters=”PP” /> 
to image
(function(w, d) {
  function generateAvatars() {
    var images = d.querySelectorAll('img[letters]');
    for (var i = 0, len = images.length; i < len; i++) {
      var img = images[i];
      img.src = AvatarImage(img.getAttribute('letters'), img.getAttribute('width'));
      img.removeAttribute('letters');
    }
  }
  d.addEventListener('DOMContentLoaded', function (event) {
      generateAvatars();
  });
})(window, document);
Very nice tip, works perfectly.