PNG 解码是指将一张 PNG 图片的二进制数据转换成像素点数据 ImageData。
PNG 的二进制数据有很多方式获取。
在浏览器中可以得到 ArrayBuffer 类型的二进制数据:
fetch(url).then(res => res.arrayBuffer()).then(res => {
console.log(arrayBuffer) });
在 Node.js 中,可以得到 Buffer 类型的二进制数据:
console.log(fs.readFileSync(filename))
在微信小程序中可以得到 ArrayBuffer 类型的二进制数据:
wx.request({
url,
responseType: 'arraybuffer',
success: (res) => {
console.log(res.data); },
});
ImageData.data 是一个 Uint8ClampedArray,其中以 R、G、B、A 的顺序保存了像素点的数据,每四项表示一个像素点。
Uint8ClampedArray 是一种 TypedArray,存储了 0-255 的数据。其中 U 表示 unsigned,也就是无符号(都是正值)。8 表示 8 位,也就是其中的数据值不能超过 2 ^ 8 = 256。Clamped 表示如果数据值小于