相关疑难解决方法(0)

如何从响应中解析出base64字符串的二进制图像?

我想将我的REST API中请求的图像解析为base64字符串.

在此输入图像描述

首先......我想,这很容易,只是window.btoa()为了这个目的使用功能.

当我尝试在我的应用程序的这一部分中执行此操作时:

.done( function( response, position ) {
    var texture = new Image();
    texture.src = "data:image/png;base64," + window.btoa( response ); 
Run Code Online (Sandbox Code Playgroud)

我有下一个错误:Uncaught InvalidCharacterError:无法在'Window'上执行'btoa':要编码的字符串包含Latin1范围之外的字符.

正如我在这里读到的:javascript atob返回'String包含无效字符'

出现问题是因为newlines in the response这就是window.btoa()失败的原因.任何二进制图像格式当然都会有换行符...但是从上面的链接建议是删除/替换这些字符 - 这对我来说是一个不好的建议,因为如果从二进制图像中删除/替换一些字符它就会是损坏.

当然,可能的替代方案与API设计有关: - 添加一些函数,返回base64表示 - 添加一些函数,返回url到图像

如果我不修复它,我将从服务器返回base64表示,但我不喜欢这样的方式.

是否存在一些方法来解决我从处理二进制图像的问题,因为它在屏幕截图中显示,不是吗?

javascript base64 image binaryfiles type-conversion

23
推荐指数
3
解决办法
3万
查看次数

使用 atob() 方法时出现无效字符错误

我已经阅读了堆栈溢出中的一个问题,此代码在 IE 10 中有效,但在 ie9 中无效,

但我仍然面临这个问题。

var image = canvas.toDataURL();
image = image.replace(/^data:[a-z]*;,/, '');
var byteString = atob(image);
var buffer = new ArrayBuffer(byteString.length);
var intArray = new Uint8Array(buffer);
for (var i = 0; i < byteString.length; i++) {
    intArray[i] = byteString.charCodeAt(i);
}
blob = new Blob([buffer], {type: "image/png"});
window.navigator.msSaveOrOpenBlob(blob, "test.png");
Run Code Online (Sandbox Code Playgroud)

在转换 atob(image) 时,它抛出异常 0x800a139e - JavaScript 运行时错误:InvalidCharacterError 我尝试了几件事,但没有任何效果...

我在图像变量中得到了这个

数据:图像/ PNG; BASE64,iVBORw0KGgoAAAANSUhEUgAAAcIAAAGQCAYAAAA9XmC5AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAABJFSURBVHhe7dvPa5x3fsDxeaR0l3UO9dLuSnJLE3rpzc6pp0KUQ2MLL8Xk1BZWt + 7BhmKaGYctfKR3ng8vjyZTE6W5St98PZnF9ZO / NeZsiyWt0 + C // RUWQBHxIkQjlBGsEx7Eb / 7ZbqQF23zz22vvf + L6 + F / Um4BQDeNRqPtvMoy194TQsc5EcIRatv2SZnmY9L1HOOUuDPdADpJCOEIRfQex7BaviCzkXsRxwc5At3kyzJwxMoXZmZfdLnZ7 / …

javascript internet-explorer-10

3
推荐指数
1
解决办法
1万
查看次数