我正在画布上使用EaselJS库进行游戏。
使用EaselJS,我可以使用滤镜应用ColorMatrix

    const myGraphics = new createjs.Shape();
    myGraphics.graphics.bf(img, 'no-repeat')
        .drawCircle(x, y, cursorSize);

    const colorMatrix = [0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0, 0, 0, 1, 0];
    const blurFilter = new createjs.BlurFilter(5, 5, 1);
    myGraphics.filters = [new createjs.ColorMatrixFilter(colorMatrix), blurFilter];

    myGraphics.cache(0, 0, 500, 500);


是否可以在不使用EaselJS的情况下应用相同的内容?
我有以下代码

    const patt = ctx.createPattern(img, 'no-repeat');
    ctx.filter = 'blur(5px)';
    ctx.fillStyle = patt;
    ctx.beginPath();
    ctx.arc(x, y, r1, 0, Math.PI * 2);
    ctx.fill();


如何将colorMatrix滤镜应用于上述画布上下文?

提前致谢

最佳答案

您可以对url(#filter_id)属性使用csv context.filter表示法的svg过滤器,对于颜色矩阵,请使用<feColorMatrix> svg元素:



const canvas = document.getElementById( 'canvas' );
const  ctx = canvas.getContext( '2d' );
const img = new Image();
img.onload = e => {
  ctx.fillStyle = ctx.createPattern(img, 'repeat');
  ctx.filter = 'url(#matrix)';
  ctx.rect( 20, 20, 460, 460 );
  ctx.scale( 0.15, 0.15 );
  ctx.fill();
};
img.src = "https://upload.wikimedia.org/wikipedia/commons/4/47/PNG_transparency_demonstration_1.png";

<svg width="0" height="0" style="position:absolute;z-index:-1">
  <filter id="matrix">
    <feColorMatrix type="matrix" values="0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0.3, 0.3, 0.3, 0, 0, 0, 0, 0, 1, 0"/>
  </filter>
</svg>
<canvas id="canvas"> width="500" height="500"></canvas>

关于javascript - 如何将ColorMatrix与Canvas上下文一起应用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59466926/

10-11 23:57