2015-01-16 5 views
2

Я попытался преобразовать строку base64 JPEG в blob на приложении Cordova/hybrid, работающем на iOS 8, используя следующую функцию b64toBlob.Преобразование base64 в blob в javascript

b64toBlob = function(b64, onsuccess, onerror) { 
    var img = new Image(); 

    img.onerror = onerror; 

    img.onload = function onload() { 
     var canvas = document.createElement('canvas'); 
     canvas.width = img.width; 
     canvas.height = img.height; 

     var ctx = canvas.getContext('2d'); 
     ctx.drawImage(img, 0, 0, canvas.width, canvas.height); 

     canvas.toBlob(onsuccess); 
    }; 

    img.src = b64; 
} 

Однако это дает ошибку

Uncaught Error: TypeError: undefined is not a function (evaluating 'canvas.toBlob(onsuccess)') 

, когда мы делаем

var imageData = "data:image/jpeg;base64," + imageData 

b64toBlob(imageData, 
    function(imageBlob) { 
     uploadBlob(imageBlob) 
    }, function(error) { 
     console.log(error) 
    }); 

Как можно обойти эту ошибку?

+0

toBlob() не работает со многими известными браузерами. Пожалуйста, попробуйте мое решение ниже. @Nyxynyx – filipvkovic

ответ

6

Попробуйте эту функцию. Обратите внимание, что dataURI включает в себя заголовок base64. (Например: "данные: изображение/JPEG; base64")

function b64toBlob(dataURI) { 

    var byteString = atob(dataURI.split(',')[1]); 
    var ab = new ArrayBuffer(byteString.length); 
    var ia = new Uint8Array(ab); 

    for (var i = 0; i < byteString.length; i++) { 
     ia[i] = byteString.charCodeAt(i); 
    } 
    return new Blob([ab], { type: 'image/jpeg' }); 
} 

Использование:

... 

var blob = b64toBlob(imageData); 

var formData = new FormData(); 
formData.append("source", blob); 
... 
+0

Я пробовал вашу функцию и получил ошибку 'Uncaught Error: InvalidCharacterError: DOM Exception 5: был указан недопустимый или незаконный символ, например, в имени XML'. Есть идеи? – Nyxynyx

+0

Я скопировал строку dataURI в https://gist.githubusercontent.com/anonymous/5440ebd3ae72708a651b/raw/273d48f0904b58c35364d422675d8d332023f1cf/gistfile1.txt – Nyxynyx

+0

Строка dataURI должна содержать заголовок base64, что-то вроде «data: image/jpeg; base64». Пожалуйста, позвольте я знаю, как это происходит. @Nyxynyx – filipvkovic

Смежные вопросы