【发布时间】:2016-02-01 19:47:54
【问题描述】:
我正在开发一个绘图应用程序,我会放置一些模板(形状遮罩),以便用户可以在上面以遮罩格式绘制。我可以添加模板(剪辑区域),但我无法删除它。我想知道如何从画布上删除这个剪辑区域,只留下用户所做的绘制。这是我用来添加模板的代码(区域剪辑):
Obs:我想移除(活)它,只留下用户在其中绘制的画。
jsFiddle 链接:Link to app on Js Fiddle
document.getElementById("addstencil").addEventListener("click", addstencil_funcao);
function addstencil_funcao() {
// layer1/Path
context.save();
context.beginPath();
context.moveTo(285.0, 279.0);
context.lineTo(0.0, 279.0);
context.lineTo(0.0, 0.0);
context.lineTo(285.0, 0.0);
context.lineTo(285.0, 279.0);
context.globalAlpha=0.3; //Opacidade da empresa
context.closePath();
context.fill();
// layer1/Path
context.beginPath();
context.moveTo(211.4, 242.2);
context.lineTo(144.0, 206.8);
context.lineTo(76.6, 242.2);
context.lineTo(89.5, 167.2);
context.lineTo(35.0, 114.0);
context.lineTo(110.3, 103.1);
context.lineTo(144.0, 34.8);
context.lineTo(177.7, 103.1);
context.lineTo(253.0, 114.0);
context.lineTo(198.5, 167.2);
context.lineTo(211.4, 242.2);
context.closePath();
context.fillStyle = "transparent";
context.fill();
context.restore();
context.clip();
var canvasPic = new Image();
canvasPic.src = imagem_source;
context.drawImage(canvasPic, 0, 0);
}
【问题讨论】:
-
仅将
.clip包裹在.save和.restore中会清除剪辑区域(或者调整画布大小也会清除剪辑)。所以正确的顺序是:.save、.beginPath、很多路径命令(没有笔触/填充)、.clip、笔触/填充、.restore。顺便说一句, fillStyle='transparent' 不会清除像素——它只是让现有像素保持不变。干杯! -
伙计,谢谢!它起作用了,删除了剪切区域(蒙版),但我无法删除剪切区域的填充(不是星星的可绘制区域,黑色不透明部分),只留下我在里面完成的绘画。知道我该怎么做吗? “picasaweb.google.com/lh/photo/…”链接到应用程序绘图 Obs 的打印:这个想法是创建一个涂鸦模板。
标签: html canvas html5-canvas draw