【问题标题】:HTML Canvas - Create a Highlighter EffectHTML Canvas - 创建荧光笔效果
【发布时间】:2018-09-12 13:36:29
【问题描述】:

我正在创建一个两层画布。底层是截图。顶层是绘图表面。我想出了一支基本的笔。我想创建一个荧光笔效果 - 意味着设置不透明度 0.5 或更低的更大线条。我遇到的问题是,当我不止一次在同一区域上绘制时,颜色会相互重叠。最终,高光将变为实心并遮挡下层。我想用原始颜色均匀突出显示,并且能够在不叠加颜色的情况下覆盖现有的突出显示。

我一直在搞乱 globalCompositeOperation,但我尝试过的设置无法获得所需的结果。下面我正在尝试color 并使用 globalAlpha 设置。我也尝试过使用rgba 颜色。我也尝试只使用一层,但我希望能够轻松清除涂鸦和擦除,所以我选择了两层。我的一些源代码在图片中,但我不确定代码对我的问题有多大帮助。如果需要,我可以提供更多。谢谢。

编辑:使用multiply 作为globalCompositionOperation 之后,颜色#FF0 又名黄色效果很好,以及其他颜色。有些颜色仍然具有原始的黑色效果,例如我在底部图片中使用的蓝色。作为旁注,这些图片不是为了分享我的代码,它们是为了显示荧光笔效果。附带说明一下,这是一个 Electron 应用程序,因此它目前使用 Chromium ~ 61。

【问题讨论】:

  • 将您的代码发布为文本而不是图像
  • @LelioFaieta 他应该如何仅用文字说明黄色高光?
  • 感谢@epistemex。希望他们只是误解了我原来的帖子......但是是的,我正在展示问题。我确实提到这不是真正的代码问题,或者有人知道如何做到这一点,或者他们不知道。
  • 通过将图片与代码并排添加?就像这里的每个人通常做的那样
  • 不知道为什么所有这些人都会对此投反对票,这是一个非常好的问题。我正在尝试完成同样的事情,但不幸的是,使用 Multiply 对我不起作用,它看起来比默认值略好,但当您将鼠标多次拖动到同一位置时,它仍然会变暗。我正在为学生创建一种注释在线学习工作表的方法,突出显示文本是我需要的功能,但文本应该始终通过突出显示。有什么建议么? Multiply 的行为是否发生了变化?

标签: javascript canvas


【解决方案1】:

创建荧光笔效果的常规方法是使用混合模式“multiply”。

这就像在真实的纸上(减光,不是技术上而是外观上的),所以在深色背景上绘图会产生几乎看不见的荧光笔效果。

请注意,并非所有浏览器都支持混合模式(包括

const ctx = c.getContext("2d");
ctx.globalCompositeOperation = "multiply";
ctx.font = "40px sans-serif";
ctx.fillText("HIGHLIGHT ME", 5, 84);        // replace with bg image
ctx.fillStyle = "#ff0";
c.onmousemove = e => ctx.fillRect(e.clientX-10, e.clientY-10, 20,20);
html, body {margin:0}
#c {border:1px solid}
<canvas id=c></canvas>

在深色背景上:

const ctx = c.getContext("2d");
ctx.fillStyle = "#333";
ctx.fillRect(0,0,c.width,c.height);
ctx.font = "40px sans-serif";
ctx.fillStyle = "#fff";
ctx.fillText("HIGHLIGHT ME", 5, 84);        // replace with bg image
ctx.fillStyle = "#ff0";
ctx.globalCompositeOperation = "multiply";
c.onmousemove = e => ctx.fillRect(e.clientX-10, e.clientY-10, 20,20);
html, body {margin:0}
#c {border:1px solid}
<canvas id=c></canvas>

【讨论】:

  • 良好的通话让事情如我所愿。我将用另一张我认为奇怪的行为的图片来更新我的原始帖子。该效果对黄色或#FF0 非常有效,其他一些颜色在多次笔划后最终变为黑色,而其他颜色开始时显示为黑色。我将不得不研究幕后发生的数学运算,以了解正在发生的事情。但再次感谢 - 黄色是完美的颜色。我还考虑过实现某种存储高亮像素的数组,并检查数组以防止重绘...
猜你喜欢
  • 2016-01-31
  • 2021-02-14
  • 1970-01-01
  • 2021-02-14
  • 2022-11-20
  • 2022-01-07
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多