html5支持.9.png,javascript-当Alpha透明时,HTML5 Canvas转换为PNG会将所有通道归零

我有一个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值