С http://www.ajaxblender.com/howto-convert-image-to-grayscale-using-javascript.html:
(Комментарии мои)
// create canvas element
var canvas = document.createElement('canvas');
var canvasContext = canvas.getContext('2d');
// assuming imgObj is a DOM representation of your image, get the width
var imgW = imgObj.width;
// ... and the height
var imgH = imgObj.height;
// set the canvas to the image dimensions
canvas.width = imgW;
canvas.height = imgH;
// draw the image on the canvas
canvasContext.drawImage(imgObj, 0, 0);
// get every pixel in the image
var imgPixels = canvasContext.getImageData(0, 0, imgW, imgH);
// cycle through the pixels vertically
for(>var y = 0; y < imgPixels.height; y++){
// cycle through the pixels horizontally
for(>var x = 0; x < imgPixels.width; x++){
var i = (y * 4) * imgPixels.width + x * 4;
// create an average grayscale color for the pixel
var avg = (imgPixels.data[i] + imgPixels.data[i + 1] + imgPixels.data[i + 2]) / 3;
// set the pixel to the newly created average color
imgPixels.data[i] = avg;
// do the same for the next two pixels
imgPixels.data[i + 1] = avg;
imgPixels.data[i + 2] = avg;
}
}
// overwrite the canvas image with the newly created array of pixels
canvasContext.putImageData(imgPixels, 0, 0, 0, 0, imgPixels.width, imgPixels.height);
// get a data URL which is to be used in the SRC attribute of the image
return canvas.toDataURL();
Кроме того, если вы хотите, чтобы «plug-and-play» jQuery-плагин сделал это для вас, взгляните на этот плагин jQuery, который обесцветит изображение для вас .