我在使用JavaScript读取JPEG二进制数据以及寻找有关库或替代方法的建议时遇到一些问题。
我正在修改一个名为jsPDF的开源PDF生成库,以便它将与Appcelerator Titanium Alloy 3.41项目一起使用。我遇到的问题是,尽管Titanium使用JavaScript,但实现并不支持所有数据类型或方法。
例如,我发现的大多数JPEG库都使用atob and btoa方法,该方法在Web浏览器中实现,用于将base64数据编码/解码为二进制字符串。不幸的是,我正在创建的项目没有使用Web浏览器,即使我改变了方法,Titanium的WebView也不支持atob或btoa方法。
[我也尝试过使用Titanium的base64encode and base64decode实用程序,但是它们返回的是Blob而不是二进制字符串,而且我见过的大多数将base64转换为二进制字符串的方法都需要ArrayBuffer,而Titanium也未实现。
我正在按照以下步骤生成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;
};
我在使用JavaScript读取JPEG二进制数据以及寻找有关库或替代方法的建议时遇到了一些问题。我正在修改开放源代码PDF生成...
我在IE 9中遇到了与jspdf.plugin.addimage.js相同的问题,其中未实现atob。您可以尝试这种保鲜盒吗? https://github.com/davidchambers/Base64.js
这里是一个纯JavaScript示例。