您可以推荐不带HTML或atob依赖项的JavaScript JPEG库吗?

问题描述 投票:0回答:2

我在使用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:

  1. 通过将JPEG读入Blob并将其转换为base64来创建dataURI。

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

  2. 然后,库从dataURI中提取图像数据。然后,库使用atob方法将base64转换为二进制字符串,然后,如果环境支持ArrayBuffers,则使用函数将ArrayBuffer转换为Titanium确实支持的Uint8Array。从那里,二进制数据用于提取JPEG的高度,宽度等。

  3. 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;
};

我在使用JavaScript读取JPEG二进制数据以及寻找有关库或替代方法的建议时遇到了一些问题。我正在修改开放源代码PDF生成...

javascript binary titanium jpeg appcelerator
2个回答
0
投票

我在IE 9中遇到了与jspdf.plugin.addimage.js相同的问题,其中未实现atob。您可以尝试这种保鲜盒吗? https://github.com/davidchambers/Base64.js


0
投票

这里是一个纯JavaScript示例。

© www.soinside.com 2019 - 2024. All rights reserved.