gpt4 book ai didi

javascript - Canvas 形状顶部的 Canvas 图像数据不透明度

转载 作者:行者123 更新时间:2023-12-03 03:32:48 26 4
gpt4 key购买 nike

在下面的示例中,我将每个图像像素的不透明度设置为零。为什么灰色背景矩形不可见,我该如何实现?我在形状与图像数据的渲染过程中遗漏了一些东西吗?

<!DOCTYPE html>
<meta charset="utf-8">

<script src="https://d3js.org/d3.v4.min.js"></script>

<body>
<canvas id='myCanvas'></canvas>
</body>

<script type="text/javascript">

var width = 500;
var height = 500;

var canvas = document.getElementById('myCanvas')
context = canvas.getContext("2d"),

canvas.width = width;
canvas.height = height;

context.fillStyle = "grey";
context.fillRect(0,0,100,100);

var imageData = context.createImageData(width, height);

for (var i = 0, l = 0; i<height; ++i) {
for (j = 0; j<width; ++j, l += 4) {
imageData.data[l+0] = Math.round( Math.random() * 255);
imageData.data[l+1] = Math.round( Math.random() * 255);
imageData.data[l+2] = Math.round( Math.random() * 255);
imageData.data[l+3] = 0;
}

}

context.putImageData(imageData, 0, 0);

</script>

最佳答案

putImageData 将使用您在 ImageData 中传递的像素设置上下文中的像素。

如果给定像素在 ImageData 中设置为透明,那么在放置它后它也会出现在上下文中。

为了避免这种情况,您可以使用 ImageBitmap 对象,您可以像图像一样在上下文上进行绘制,

const ctx = c.getContext('2d');
ctx.fillStyle = 'red';
ctx.fillRect(0,0,30,30);
const iData = ctx.createImageData(300, 150);
// make the noise mostly transparent
iData.data.forEach((d,i,a)=>{
a[i] = (i+1)%4 ? Math.random() * 255 : Math.random() * 125;
})
createImageBitmap(iData).then(img => ctx.drawImage(img, 0,0));
<canvas id="c"></canvas>

或使用离屏 Canvas :

const ctx = c.getContext('2d');
ctx.fillStyle = 'red';
ctx.fillRect(0,0,30,30);
const iData = ctx.createImageData(300, 150);
// make the noise mostly transparent
iData.data.forEach((d,i,a)=>{
a[i] = (i+1)%4 ? Math.random() * 255 : Math.random() * 125;
})

const offCtx = c.cloneNode().getContext('2d'); // an offscreen canvas
offCtx.putImageData(iData, 0,0);
ctx.drawImage(offCtx.canvas, 0,0);
<canvas id="c"></canvas>

关于javascript - Canvas 形状顶部的 Canvas 图像数据不透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46011894/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com