Одна проблема с ответом calavera.info (извините, я не могу прокомментировать этот ответ напрямую) заключается в том, что вызов либо CanvasRenderingContext2D.getImageData, либо Canvas.toDataURL, упомянутый в третьем пункте, не будет выполнен. Каждый из них генерирует исключение SECURITY_ERR: DOM 18, поскольку изображение не из того же источника или домена, что и документ, которому принадлежит элемент canvas. Это кажется неизбежным, поскольку изображение поступает из локальной файловой системы (через тэг input type = "file"), но страница поступает с вашего веб-сервера.