我正在使用Konva.js框架并尝试将图像蒙版应用于另一个。 代码完全从此post复制。 在这个jsfiddle example中,添加背景(Rect)有一些小修改。
问题是背景未正确绘制。要在代码中查看它的实际操作,可以注释/取消注释(以查看操作中的问题)。 有人有任何想法实现这个目标吗?
最佳
let stage = new Konva.Stage({
container: 'container',
width: window.innerWidth,
height: window.innerHeight
});
let layer = new Konva.Layer();
let rect = new Konva.Rect({
x: 0,
y: 0,
width: 900,
height: 900,
draggable: true,
fill: '#ff8619',
});
// -------------------------------------
// Line to comment or uncomment
//layer.add(rect);
// -------------------------------------
stage.add(layer);
let mask = new Image();
mask.onload = () => {
let img = new Image();
img.onload = () => {
let image = new Konva.Shape({
sceneFunc: (ctx) => {
ctx.save();
ctx.drawImage(mask, -image.x(), -image.y(), 200, 200);
ctx.globalCompositeOperation = 'source-in';
ctx.drawImage(img, 0, 0, 200, 200);
ctx.globalCompositeOperation = 'source-over';
ctx.restore();
},
// (!) important
// for this case you need to define custom hit function
hitFunc: (ctx) => {
ctx.rect(0, 0, 200, 200);
ctx.fillStrokeShape(image);
},
draggable: true
});
layer.add(image);
layer.draw();
};
img.src = "http://i.imgur.com/kKjW3U4.png";
};
mask.src = "http://i.imgur.com/fQX2P8S.png";
答案 0 :(得分:1)
问题是你需要:
1.添加一个新图层:let layer2 = new Konva.Layer();
2.按正确顺序将其添加到舞台:stage.add(layer2, layer);
这是更新的:
jsfiddle example