我正在开发一个项目,我需要在不使用HTML5 Canvas的情况下将base64 dataUri转换为Uint8ClampedArray。这就是我想出来的,但我认为Uint8ClampedArray并不能代表像素表。
function dataUri2Array(uri){
b64 = uri.slice(uri.indexOf(',')+1);
str = atob(b64);
arr = str.split('').map(function (e) {return e.charCodeAt(0);});
u = new Uint8ClampedArray(arr);
return u;
},
答案 0 :(得分:3)
由于您不想使用Canvas
,因此您需要自己为各种图像类型实现编码/解码。您的代码将类似于:
function dataUri2Array(uri){
b64 = uri.slice(uri.indexOf(',')+1);
type = getImageType(uri); // *
data = atob(b64);
switch (type) {
case "jpeg":
arr = decodeJpeg(data);
break;
case "gif":
arr = decodeGif(data);
break;
case "png":
arr = decodePng(data);
break;
default:
break;
}
u = new Uint8ClampedArray(arr);
return u;
}
需要实现getImageType(uri)
函数和所有decodeX(data)
函数。以下是一些可能有用的库:jpeg-js,node-pngjs,bmp-js等。从任意数据中获取像素数组非常重要,尤其是在处理非原始类型时(例如{{ 1}})。
如果您想自己编写解压缩程序,Wiki page可能是一个很好的介绍,但我也建议您阅读Shannon-Fano和其他类型的编码方法,以熟悉这个概念。 / p>
我希望你有充分的理由不使用BMP
。