Para combinar correctamente dos imágenes usando una transparencia máscara es necesario en primer lugar para tomar una de las dos imágenes y ponerlo en un fuera de la pantalla lienzo, y añadir la máscara de transparencia deseado usando context.globalCompositeOperation = destination-out
por @ respuesta de 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);
Entonces, para fusionar las dos imágenes en realidad le º es necesario señalar a la otra imagen en otro lienzo, y luego simplemente señalar a la alfa-composited fuera de la pantalla de la lona por encima de eso:
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);
demo en http://jsfiddle.net/alnitak/rfdjoh31/4/
Ah, sabía que después se me olvidó especificar que ya Saber cómo crear un degradado como este https://developer.mozilla.org/samples/canvas-tutorial/4_9_canvas_lineargradient.html que obtendría esta respuesta. Lamentablemente, estos solo se aplican a colores específicos. Si se trata de una imagen (color no sólido), por otro lado, este método simplemente no funciona. – mjrevel
volví y eché un vistazo a la imagen y veo lo que quieres ahora. Buena pregunta. Estoy pensando que si sacas la imagen en un lienzo separado y recuperas los datos de la imagen, puedes aplicarle un degradado y luego superponerla sobre el lienzo original. Voy a jugar y ver qué puedo hacer. – Castrohenge
Suena bien, no tendré que dedicarle mucho tiempo durante el fin de semana para trabajar en él, pero también veré lo que se me ocurrió. Mantenme informado sobre cualquier cosa que averigües también. Definitivamente quiero resolver esto. – mjrevel