我有一个Uint32Array,我正在尝试将其转换为WebGL的纹理.为此,我将数组写为Canvas上的RGBA值,并从画布获取以base64编码的PNG作为纹理发送.
每当我将像素值设置为alpha为0时,转换为PNG时相应的RGB通道也会被清零.这是实施细节吗?如果要在其他一些非HTML5程序中创建PNG,我可以将(RGBA)四元组设置为(255,255,255,0)吗?我尝试使用1的alpha值,并且所有其他通道保持不变,因此这不是预乘alpha的问题.
以下是一些JavaScript代码可重现此效果:
var img = new Image();
var canvasObj = $('');
var context = canvasObj[0].getContext('2d');
var imgd = context.getImageData(0,0,1,1);
var pix = imgd.data;
pix[0]=255; pix[1]=255; pix[2]=255; pix[3]=0;
context.putImageData(imgd,0,0);
img.src = canvasObj[0].toDataURL("image/png");
context.drawImage(img,0,0);
var imgd2 = context.getImageData(0,0,1,1);
var pix2 = imgd2.data;
pix2全为0.
谢谢!
解决方法:
…fully transparent pixels should all be assigned the same
color value for best compression.
我找不到直接来源,但似乎这个特定的实现将所有通道设置为零.
标签:png,html5-canvas,javascript
来源: https://codeday.me/bug/20191201/2077680.html