小编Pat*_*ied的帖子

HTML5 Canvas globalCompositeOperation用于覆盖不增加更高强度的渐变?

我正在研究heatmap.js修复,我想知道是否有人知道是否有可能用<canvas>2d渲染上下文来实现以下效果.

  • 我有一个从黑色(alpha 0.5)到透明40像素半径的径向渐变.径向梯度的中心在x = 50,y = 50
  • 我有另一个从黑色(alpha 0.5)到透明,40像素半径的径向渐变.径向梯度的中心位于x = 80,y = 50

两个梯度重叠.我现在的问题是:重叠区域加在一起导致比径向渐变中心更高的alpha值,从而显示错误的数据(例如,由于渐变之间的那些添加,热图中的较热区域)

看看下面的要点,通过在控制台中执行它,您可以看到问题.

预期的行为将是:最暗的区域是渐变中心,两个渐变的重叠区域合并但不会加起来.

在看到没有globalCompositeOperations导致预期的行为后,我尝试了这些操作的组合.我认为可能的方式可能如下:

  • 绘制第一个渐变
  • 使用compositeOperation'destination-out'
  • 绘制第二个渐变 - >从第一个渐变中减去重叠区域
  • 使用compositeOperation'source-over'
  • 再次绘制第二个渐变

但不幸的是,我没有找到一个有效的组合.我很想听听您的反馈,提前谢谢!

PS:我知道这可以通过手动操作像素来完成,但我想知道是否有更简单,更优雅和更快的解决方案.

javascript canvas heatmap html5-canvas

13
推荐指数
1
解决办法
4392
查看次数

标签 统计

canvas ×1

heatmap ×1

html5-canvas ×1

javascript ×1