bac*_*ces 1 compression storage transmission typed-arrays
我们开始通过画布的 ImageData 对象使用图像来方便地存储 TypedArrays。但由于预乘而失败......将我们限制为 24 位数据。我们对此一瘸一拐,但希望有一个 32 位解决方案。
我们想要转换为使用任何 TypedArray 或其 ArrayBuffer。但这些都缺乏压缩。
小智 5
ImageData将为您提供 32 位(RGB + Alpha 通道)。预乘部分指的是Alpha 通道和由于使用整数值而产生的舍入误差(除非您想制作基于自定义浮点的位图,否则无法解决此问题,这是可能的,但速度较慢)。您仍然会得到 32 位数据,但会出现一些舍入错误。
对于数据,您可以使用JavaScript 的 zlib 端口的Pako 实现。它速度快,并且与原始实现结果 100% 兼容,并提供良好的压缩。
它返回一个Uint8Array可以转换为 Blob 或ArrayBuffer 使用 f.ex 存储的值。IndexedDB或通过网络传输。
压缩数据:
// assuming CORS requirements are fulfilled:
var data = ctx.getImageData(x, y, width, height).data;
var comp = pako.deflate(data);
Run Code Online (Sandbox Code Playgroud)
解压数据:
try {
var data = pako.inflate(comp);
var idata = new ImageData(width, height); // or via getImageData()
idata.data.set(data);
ctx.putImageData(idata, x, y);
}
catch (err) {
console.log(err);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3363 次 |
| 最近记录: |