Чтобы правильно объединить два изображения с помощью маски прозрачности, сначала необходимо взять одно из двух изображений и поместить его на холст за пределами экрана и добавить желаемую маску прозрачности, используя context.globalCompositeOperation = destination-out
per @ Tommykaответ
var offscreen = document.createElement('canvas'); // detached from DOM
var context = offscreen.getContext('2d');
context.drawImage(image1, 0, 0, image1.width, image1.height);
var gradient = context.createLinearGradient(0, 0, 0, img.height);
gradient.addColorStop(0, "rgba(255, 255, 255, 0.5)");
gradient.addColorStop(1, "rgba(255, 255, 255, 1.0)");
context.globalCompositeOperation = "destination-out";
context.fillStyle = gradient;
context.fillRect(0, 0, image1.width, image1.height);
Затем, чтобы фактически объединить два изображения, вам нужно нарисовать другое изображение на другом холсте, а затем просто нарисовать альфа-композицию закадрового холста поверх этого:
var onscreen = document.getElementById('mycanvas');
var context2 = onscreen.getContext('2d');
context2.drawImage(image2, 0, 0, image2.width, image2.height);
context2.drawImage(offscreen, 0, 0, onscreen.width, onscreen.height);
Демо на http://jsfiddle.net/alnitak/rfdjoh31/4/