我想在IE9中使用以下库,但后者不支持Uint8Array或一般类型的数组。
Uint8Array包装器在代码中只使用了一次,但实际上它似乎是多余的。你能证实吗?
第71行:http://www.perry.cz/files/ExifRestorer.js(只是一个非常小的lib,用于从JPEG中提取Exif信息)
insertExif函数返回一个普通数组,然后exifManipulation在base64编码之前放入Uint8Array:
var image = this.exifManipulation(resizedFileBase64 /*plain string*/, segments /*plain array of plain arrays*/);
this.encode64(image);
...
ExifRestorer.exifManipulation = function(resizedFileBase64, segments)
{
var exifArray = this.getExifArray(segments), /*plain array*/
newImageArray = this.insertExif(resizedFileBase64, exifArray), /*plain array*/
aBuffer = new Uint8Array(newImageArray);
return aBuffer;
};
ExifRestorer.encode64 = function(input)
{
var output = "",
chr1, chr2, chr3 = "",
enc1, enc2, enc3, enc4 = "",
i = 0;
do {
chr1 = input[i++];
chr2 = input[i++];
chr3 = input[i++];
enc1 = chr1 >> 2;
enc2 = ((chr1 & 3) << 4) | (chr2 >> 4);
enc3 = ((chr2 & 15) << 2) | (chr3 >> 6);
enc4 = chr3 & 63;
if (isNaN(chr2)) {
enc3 = enc4 = 64;
} else if (isNaN(chr3)) {
enc4 = 64;
}
output = output +
this.KEY_STR.charAt(enc1) +
this.KEY_STR.charAt(enc2) +
this.KEY_STR.charAt(enc3) +
this.KEY_STR.charAt(enc4);
chr1 = chr2 = chr3 = "";
enc1 = enc2 = enc3 = enc4 = "";
} while (i < input.length);
return output;
};
据我了解代码,它无论如何都在内部使用普通数组。它没有使用Uint8Array作为类型数组规范最初预期的ArrayBuffer视图,它只是将plain数组传递给构造函数。
我没有看到将它放入Uint8Array的重点,而不是直接返回基础数值数组(单个字节的[0,255]范围中的每个元素)。事实上,在Windows 7的IE9测试中,代码在没有Uint8Array包装器的情况下工作。
我是否遗漏了任何可能的场景或环境,直接从底层数值数组访问单个元素而不是通过Uint8Array视图会在encode64函数中返回错误或不可靠的结果?我无法想象任何事情。
图书馆没有官方支持,因此我的问题在这里。谢谢大家调查。