【发布时间】:2020-09-17 12:54:39
【问题描述】:
我想做一个很酷的可视化,在我的画布上重叠许多半透明的图像。为此,我决定使用context.putImageData(),因为这些图像存储为数组。问题是这种方法忽略了画布的实际背景和已经绘制的图像,并计算了相对于白色背景的透明度。
这是一个显示当前行为的 sn-p:
<!DOCTYPE html>
<html>
<body>
<canvas id='cvs' width='100' height='100'></canvas>
</body>
<script>
const size = 50
const context = document.getElementById('cvs').getContext('2d');
const redSquare = context.createImageData(size, size);
for (let i=0; i<size*size*4; i=i+4) {
redSquare.data[i] = 255;
redSquare.data[i + 3] = 255; // 1.0 opacity rbga(1, 0, 0, 1)
}
context.putImageData(redSquare, 10, 10);
const trasparentBlackSquare = context.createImageData(size, size);
for (let i=0; i<size*size*4; i=i+4) {
trasparentBlackSquare.data[i + 3] = 100; // 0.4 opacity rbga(0, 0, 0, 0.4)
}
context.putImageData(trasparentBlackSquare, 30, 30);
</script>
</html>
我用两个不同的重叠画布生成了这张图片,这不适合我的问题。
如果有任何解决此问题的方法,请告诉我。
【问题讨论】:
-
您是想要覆盖源自“普通”图像的图像 - 即 .jpg 或 .png 还是想要覆盖您展示的形状? (我想这只是一个演示,但我不确定)。
-
@A Haworth 是的,我的目标是渲染存储为张量的真实图像。抱歉,演示示例过于简单。
标签: javascript html canvas