Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/408.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript html5中的复杂混合_Javascript_Html5 Canvas - Fatal编程技术网

Javascript html5中的复杂混合

Javascript html5中的复杂混合,javascript,html5-canvas,Javascript,Html5 Canvas,我需要重新创建和动画一个复杂的插图,这已经在illustrator创建,作为一个网页。 插图由使用不同混合模式的多个形状(圆形、方形和波浪)组成。因此,一个圆可能会使用“差”,另一个圆可能会使用“乘”等 有没有可能像Illustrator/Photoshop等中那样,在同一画布元素中的不同图形上有多种不同的混合模式 非常感谢 是的,html5可用于绘制应用了单独混合的形状。 一个警告是,一次只能进行一个混合,因此如果一个形状需要多个混合,则必须按顺序进行每个混合 如果形状在画布上彼此重叠,则可以

我需要重新创建和动画一个复杂的插图,这已经在illustrator创建,作为一个网页。 插图由使用不同混合模式的多个形状(圆形、方形和波浪)组成。因此,一个圆可能会使用“差”,另一个圆可能会使用“乘”等

有没有可能像Illustrator/Photoshop等中那样,在同一画布元素中的不同图形上有多种不同的混合模式


非常感谢

是的,html5可用于绘制应用了单独混合的形状。

一个警告是,一次只能进行一个混合,因此如果一个形状需要多个混合,则必须按顺序进行每个混合

如果形状在画布上彼此重叠,则可以在第二个“暂存画布”上合成每个混合形状。暂存画布位于内存中,不可见

此外,混合在MS Edge中是新的,因此混合在MS的IE系列浏览器中不可用

下面是开始的示例代码和演示:

var canvas=document.getElementById(“canvas”);
var ctx=canvas.getContext(“2d”);
var cw=画布宽度;
var ch=画布高度;
var shape1=舞台造型(“乘”、“红”、“蓝”);
var shape2=舞台造型(“差异”、“红色”、“蓝色”);
ctx.drawImage(形状1,50,50);
ctx.drawImage(形状2,75,30);
函数stageShape(blendMode、color1、color2){
var c=document.createElement(“画布”);
var cctx=c.getContext(“2d”);
c、 宽度=80;
c、 高度=80;
cctx.beginPath();
cctx.arc(30,30,30,0,数学PI*2);
cctx.fillStyle=color1;
cctx.fill();
cctx.globalCompositeOperation=blendMode;
cctx.beginPath();
cctx.arc(50,50,30,0,数学PI*2);
cctx.fillStyle=color2;
cctx.fill();
返回(c);
}
body{背景色:白色;}
画布{边框:1px纯红;边距:0自动;}

如果形状相对较少,则使用SVG。如果有数百个形状,请使用画布。如果您必须支持IE,那么您必须使用SVG,因为IE的画布不支持混合。谢谢。在我的例子中,我有一个混合模式为“乘”的红色圆圈,一个混合模式为“差”的蓝色圆圈,一个混合模式为“颜色减淡”的绿色圆圈,背景色为“颜色减淡”。是否需要“暂存画布”来抽象此内容?是的,需要一个暂存画布(或两个或更多)来进行顺序混合。但好消息是混合是在GPU上完成的(如果可用),所以速度非常快。再次感谢。这给了我们希望,尽管看起来很复杂……)你有关于“舞台画布”概念的更多信息吗?现在正在尝试在其余的interwebs中查找更多示例。@zantafio staging canvas只是一个工作画布,用于在一系列混合中构建一个混合。该示例使用一个暂存画布来分隔两种混合模式。我已经编辑了我的答案,以重叠每个混合的位置,以显示在并没有第二个阶段画布的情况下不容易实现的内容。对于更复杂的混合,您甚至可能需要使用多个暂存画布。干杯!:-)谢谢!那当然有帮助