2014-11-25 48 views
0

我在使用JavaScript閱讀JPEG二進制數據時遇到了一些問題,並在庫或其他方法上尋求一些建議。你能推薦一個沒有HTML或者atob依賴的JavaScript庫嗎?

我正在努力修改一個名爲jsPDF的開源PDF生成庫,以便它可以與Appcelerator Titanium Alloy 3.41項目一起使用。我遇到的問題是,儘管Titanium使用JavaScript,但實現不支持所有數據類型或方法。

例如,我發現的大多數JPEG庫都使用atob and btoa方法,這些方法在Web瀏覽器中實現以將base64數據編碼/解碼爲二進制字符串。不幸的是,我創建的項目不使用Web瀏覽器,即使我改變了我的方法Titanium的WebView不支持atob或btoa方法。

我一直在使用鈦的base64encode and base64decode事業也試過但是它們返回的Blob而不是二進制字符串和我見過的base64轉換爲二進制字符串的大多數方法需要一個ArrayBuffer其中鈦還沒有實現。

我跟隨以下步驟生成PDF:

  1. 通過讀取JPEG成Blob並將其轉換爲base64創建dataURI。

    var imgData ='data:image/jpeg; base64,/ 9j/4AAQSkZJRgABAQEA ............ ooA // 2Q ==';

  2. 該庫然後從dataURI中提取圖像數據。然後庫使用atob方法將base64轉換爲二進制字符串,然後如果環境支持ArrayBuffers,則使用函數將ArrayBuffer轉換爲Titanium支持的Uint8Array。從那裏,二進制數據被用來提取JPEG高度,寬度等

Code extract from jsPDF

var base64Info = this.extractInfoFromBase64DataURI(imageData); 
if(base64Info) { 
    format = base64Info[2]; 
    imageData = atob(base64Info[3]);//convert to binary string, the base64 encoded JPEG 
} 

..... 

if(this.supportsArrayBuffer()) { 
    dataAsBinaryString = imageData; 
    imageData = this.binaryStringToUint8Array(imageData); 
} 

..... 

function binaryStringToUint8Array(binary_string) { 
    var len = binary_string.length; 
    var bytes = new Uint8Array(len); 
    for (var i = 0; i < len; i++) { 
    bytes[i] = binary_string.charCodeAt(i); 
    } 
    return bytes; 
}; 

回答

相關問題