我在使用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:
通過讀取JPEG成Blob並將其轉換爲base64創建dataURI。
var imgData ='data:image/jpeg; base64,/ 9j/4AAQSkZJRgABAQEA ............ ooA // 2Q ==';
該庫然後從dataURI中提取圖像數據。然後庫使用atob方法將base64轉換爲二進制字符串,然後如果環境支持ArrayBuffers,則使用函數將ArrayBuffer轉換爲Titanium支持的Uint8Array。從那裏,二進制數據被用來提取JPEG高度,寬度等
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;
};