javascript - 如何在 Canvas 上的图像上执行 "paint"?

标签 javascript html canvas

我想在 Canvas 上使用这样的图像:

enter image description here

用户将“绘制并填充”图像,但不在轮廓之上。

问题是:
如果我放在 Canvas 后面,颜料就会覆盖轮廓。
如果我将图像放在 Canvas 上,则会阻止 Canvas 交互。

你们能帮我吗?

最佳答案

使用合成模式“destination-over”在现有内容(来自图像、矢量等)后面绘制。现有内容必须提供 Alpha channel ,否则合成将无法工作。如果没有 alpha channel ,您可以 convert inverse luma / matte (白色)到 Alpha channel 。

// a quick-n-dirty demo
var ctx = c.getContext("2d");
ctx.lineWidth = 10;
ctx.moveTo(100, 0); ctx.lineTo(150, 150); ctx.stroke();
ctx.fillStyle = "#09f";

// KEY: composite mode -
ctx.globalCompositeOperation = "destination-over";

// draw behind the line
c.onmousemove = function(e) {
  ctx.fillRect(e.clientX - 10, e.clientY - 10, 20, 20);
};
body {margin:0}
canvas {border:#777 solid 1px}
<canvas id="c"></canvas>

关于javascript - 如何在 Canvas 上的图像上执行 "paint"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40907035/

相关文章:

javascript - 将自定义 header 添加到 Web 服务调用并在 Web 服务方法中读取它

javascript - 如何使用 Grunt.js 在 bootstrap.less 中注入(inject)外部 .less 文件

javascript - 创建一个显示/隐藏按钮来切换表格列

html - 如何在 Angular Material 出现垫子错误之前正确对齐图像?

jquery - Div 未在 FireFox 中正确定位

javascript - 使用 Javascript 创建具有漫画风格/手抖动的 SVG/ Canvas 草图

javascript - 在 Javascript 函数中调整 Canvas 元素的大小

javascript - 从 ajax 响应对象中多次替换一个词?

c# - 如何在 Windows 8 应用程序中应用边缘检测 oncamera 流等图像效果?

jquery 点击同级选择