Я разрабатываю простое приложение, для которого мне нужно использовать несколько globalCompositeOperation, поэтому мне нужно использовать несколько скрытых элементов, а затем объединить их, чтобы получить окончательный результат.merging multiple <canvas> issue
один из элементов холста используется для drawImage(), а затем использовать его как альфа-маску.
Я предположил, что на 2-м холсте, если я использую рисование 1-го холста, он скопирует его точно так, что я могу добавить 2-е место поверх него. Это только скопирует FillRect() и игнорирует DrawImage() функцию ...
Любая идея, как я могу передать все содержание первого холста до 2? Мне нужно, чтобы замаскированная часть переместилась на второй холст.
Застрял на нем в течение нескольких часов и вам нужна ваша помощь. Пытались использовать toDataUrl ("изображение/PNG") и затем вывод, что в 2 холст, но получить те же результаты :(
упрощенная версия под: http://jsfiddle.net/EbVmm/17/
Благодарности
var c1 = document.getElementById("canvas1");
var c2 = document.getElementById("canvas2");
function drawScene(mainColour) {
var ctx = c1.getContext("2d");
var alphaPath = "http://eskarian.com/images/alpha-test.png";
var alphaObj = new Image();
alphaObj.src = alphaPath;
ctx.fillStyle = mainColour;
ctx.fillRect(0, 0, 200, 300);
ctx.globalCompositeOperation = 'xor';
alphaObj.onload = function() {
ctx.drawImage(alphaObj, 0, 0);
};
};
function addScene(colour) {
var ctx2 = c2.getContext("2d");
ctx2.drawImage(c1, 0, 0);
ctx2.globalCompositeOperation = "source-over";
ctx2.fillStyle = colour;
ctx2.fillRect(50, 50, 100, 100);
};
Спасибо, такая легкая вещь - слишком много думала, потому что решение было таким простым :) Кстати, есть только одно небольшое изменение, которое я должен был сделать в вашем коде. 'ctx.drawImage (alphaObj, 0, 0);' должно быть после 'ctx.globalCompositeOperation = 'xor';' для того, чтобы альфа работала должным образом. Помимо этого, он работает как шарм :) –