2014-11-25 49 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; 
}; 

回答

相关问题