0

私の Angular2 アプリケーションでは、Uint8Array 形式の画像を表示したいと考えています。しかし、「Maximum Call Stack Exceeded」が表示されます。サイズが ~48Kb の画像をエラーなしでレンダリングできました。しかし、画像サイズが ~300Kb を超えると、このエラーが発生します。これは私が画像をレンダリングする方法です:

(<HTMLInputElement>document.getElementById("imagePreview")).src = "data:image/" + type + ";base64," +
                        btoa(String.fromCharCode.apply(null, objData.Body));

誰かが私が正しい方法でそれを行っているかどうか教えてください。そうでない場合は、正しい方法を教えてください

4

2 に答える 2

2

String.fromCharcode()maximum call stack exceeded大きな文字列データを含む に遭遇します。

上記のオブジェクトを変換できるようにするbase64には、文字列の長さに基づいてループを実装する必要があります。次のようなことが頭に浮かびます。

let img: HTMLInputElement = (<HTMLInputElement>document.getElementById("imagePreview"));
let bin : string = '';

for (let i = 0, l = objData.Body.length; i < l; i++) {
    bin += String.fromCharCode(objData.Body[i]);
}

img.src = "data:image/" + type + ";base64," + btoa(bin);

おそらく、文字列を1文字よりも大きな断片に分割する方が効率的ですが、最も迅速な方法を見つけるのはあなた次第です:)

于 2016-07-05T06:24:57.357 に答える