Отсюда я бы сказал, что ваша проблема заключается во втором параметре substr:
image.indexOf(">") - startIndex - 2
Хотя оставшаяся часть вашего кода указывает на нормальный dataURI, эта часть подразумевает наличие символа, который не будетдопустимо там (>
).
Так что я сильно подозреваю, что значение этого второго параметра будет -1 -16 -2
=> -19
и, таким образом, возможно, удалит слишком много данных, что сделает вашу строку base64 недопустимой (например, если его длина / 4 оставляет 1 остаток).
Так что, если у вас действительно есть действительный dataURI, все, что вам нужно, это удалить второй аргумент:
function saveIMG(image) {
var startIndex = image.indexOf("base64,") + 7;
var b64 = image.substr(startIndex);
var byteCharacters = atob(b64);
var byteNumbers = new Array(byteCharacters.length);
for (var i = 0; i < byteCharacters.length; i++) {
byteNumbers[i] = byteCharacters.charCodeAt(i);
}
var byteArray = new Uint8Array(byteNumbers);
var data = new Blob([byteArray], {type: 'image/jpeg'});
return "<img src='" + window.URL.createObjectURL(data) + "' width='150'/>";
}
// a black 300x150px JPEG image
var dataURI = document.createElement('canvas').toDataURL('image/jpeg');
var imgStr = saveIMG(dataURI);
document.body.innerHTML = imgStr;