gpt4 book ai didi

javascript - 当 alpha 透明时,HTML5 Canvas 到 PNG 将所有 channel 归零

转载 作者:行者123 更新时间:2023-11-29 10:50:16 25 4
gpt4 key购买 nike

我有一个 Uint32Array,我正在尝试将其转换为 WebGL 的纹理。为此,我将数组作为 RGBA 值写入 Canvas ,并从 Canvas 获取 base64 编码的 PNG 作为纹理发送。

每当我将像素值设置为 alpha 为 0 时,相应的 RGB channel 也会在转换为 PNG 时归零。这是一个实现细节吗?如果我要在其他一些非 HTML5 程序中创建 PNG,我可以得到 (RGBA) 四元组 (255,255,255,0) 吗?我尝试使用 1 的 alpha 值并且所有其他 channel 保持不变,因此这不是预乘 alpha 的问题。

下面是一些重现此效果的 javascript 代码:

    var img = new Image();
var canvasObj = $('<canvas width="1" height="1"></canvas>');
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。

谢谢!

最佳答案

它似乎是 PNG 规范的一部分 ( http://www.libpng.org/pub/png/spec/1.2/png-1.2-pdg.html )。

...fully transparent pixels should all be assigned the same color value for best compression.

我找不到直接来源,但似乎这个特定的实现将所有 channel 设置为零。

关于javascript - 当 alpha 透明时,HTML5 Canvas 到 PNG 将所有 channel 归零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11601302/

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