移動端照片上傳、頭像裁剪完整功能,兼容iphone,android (二):base6四、blob相關知識點

在上一篇照片上傳博文中(http://www.javashuo.com/article/p-rfjypxlp-hg.html)有一段關於base64轉blob的代碼,弄懂這篇講的,javascript

那段代碼也就一目瞭然了。html

一:base6四、atob、btoajava

       Base64是常見的用於傳輸8Bit的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。Base64編碼是canvas

從二進制到字符的過程,可用於在HTTP環境下傳遞較長的標識信息。Base64編碼具備不可讀性,須要解碼後才能閱讀。數組

      1.使用atob()方法解碼base64形式的編碼字符。函數

         該方法解碼由btoa()編碼的字符。編碼

      2.使用btoa()方法使字符編碼成base64的形式。code

        該方法使用"A-Z", "a-z", "0-9", "+", "/" 和 "="字符進行編碼。htm

        該方法的編碼由atob()解碼。對象

二:blob

       BLOB (binary large object),二進制大對象,是一個能夠存儲二進制文件的容器。

      建立Blob對象的方法有幾種,能夠調用Blob構造函數,還可使用一個已有Blob對象上的slice()方法切出另外一個Blob對象,還能夠

調用canvas對象上的toBlob方法。

new Blob(
  [可選] Array parts,
  [可選] BlobPropertyBag properties
);
例如:

var myBlob= new Blob(arrayBuffer);
其中,兩個參數的含義是:

parts
一個數組,包含了將要添加到Blob對象中的數據。數組元素能夠是任意多個的ArrayBuffer, ArrayBufferView(typed array), Blob, 或者DOMString對象。
properties
一個對象,設置Blob對象的一些屬性。目前僅支持一個type屬性,表示Blob的類型。

  有了以上的知識,再來看看代碼:

 function b64toBlob(b64Data, contentType, sliceSize) {
        // 文件類型
        contentType = contentType || '';
        //  文件分割的大小,通常上傳文件512
        sliceSize = sliceSize || 512;
        // 解碼base64
        var byteCharacters = atob(b64Data);
        var byteArrays = [];
        //  構造blob的第一個參數數據
        for (var offset = 0; offset < byteCharacters.length; offset += sliceSize) {
            var slice = byteCharacters.slice(offset, offset + sliceSize);
            var byteNumbers = new Array(slice.length);
            for (var i = 0; i < slice.length; i++) {
                byteNumbers[i] = slice.charCodeAt(i);
            }
            var byteArray = new Uint8Array(byteNumbers);
            byteArrays.push(byteArray);
        }
        // 建立blob
        var blob = new Blob(byteArrays, {type: contentType});
        return blob;
    }        
相關文章
相關標籤/搜索