如何在不使用HTML5 Canvas的情况下将base64 dataUri转换为Uint8ClampedArray?

时间:2014-09-03 18:29:17

标签: javascript html5 canvas

我正在开发一个项目,我需要在不使用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;
},

1 个答案:

答案 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-jsnode-pngjsbmp-js等。从任意数据中获取像素数组非常重要,尤其是在处理非原始类型时(例如{{ 1}})。

如果您想自己编写解压缩程序,Wiki page可能是一个很好的介绍,但我也建议您阅读Shannon-Fano和其他类型的编码方法,以熟悉这个概念。 / p>

我希望你有充分的理由不使用BMP