【发布时间】:2017-05-31 22:26:37
【问题描述】:
看看下面的svg。那里的路径几乎相同,但第二个路径是通过使用evenodd 填充并在其中的形状中添加一个完整的矩形来反转的。
body {
background: linear-gradient(to bottom, blue, red);
}
svg {
height: 12em;
border: 1px solid white;
}
svg + svg {
margin-left: 3em;
}
<svg viewBox="0 0 10 10">
<path d="
M 1 1 L 2 3 L 3 2 Z
M 9 9 L 8 7 L 7 8 Z
" />
</svg>
<svg viewBox="0 0 10 10">
<path fill-rule="evenodd" d="
M 0 0 h 10 v 10 h -10 z
M 1 1 L 2 3 L 3 2 Z
M 9 9 L 8 7 L 7 8 Z
" />
</svg>
现在我想在canvas 上画同样的图片。第一张图没有问题:
~function () {
var canvas = document.querySelector('canvas');
var ctx = canvas.getContext('2d');
var h = canvas.clientHeight, w = canvas.clientWidth;
canvas.height = h;
canvas.width = w;
ctx.scale(h / 10, w / 10);
ctx.beginPath();
ctx.moveTo(1, 1);
ctx.lineTo(2, 3);
ctx.lineTo(3, 2);
ctx.closePath();
ctx.fill();
ctx.beginPath();
ctx.moveTo(9, 9);
ctx.lineTo(8, 7);
ctx.lineTo(7, 8);
ctx.closePath();
ctx.fill();
}()
body {
background: linear-gradient(to bottom, blue, red);
}
canvas {
height: 12em;
border: 1px solid white;
}
<canvas height="10" width="10"></canvas>
但如果我需要画布具有透明背景,我该如何绘制第二个?
每个路径片段仅由行 L 组成,从 M 开始,以 Z 结束。
片段不重叠。
【问题讨论】:
标签: javascript html canvas svg