Изображение необходимо преобразовать в base64, а затем из base64 в двоичный файл.Это делается с помощью .toDataURL()
и dataURItoBlob()
Img => Base64 => Binary
function imgToURI() {
// Convert image to Base64
var img = snap.toDataURL();
// Convert Base64 image to binary
var file = dataURItoBlob(img);
}
function dataURItoBlob(dataURI) {
// convert base64/URLEncoded data component to raw binary data held in a string
var byteString;
if (dataURI.split(',')[0].indexOf('base64') >= 0)
byteString = atob(dataURI.split(',')[1]);
else
byteString = unescape(dataURI.split(',')[1]);
// separate out the mime component
var mimeString = dataURI.split(',')[0].split(':')[1].split(';')[0];
// write the bytes of the string to a typed array
var ia = new Uint8Array(byteString.length);
for (var i = 0; i < byteString.length; i++) {
ia[i] = byteString.charCodeAt(i);
}
return new Blob([ia], {type:mimeString});
}
Вы можете остановиться на base64, если это все, что вам нужно, в моем случае мне нужно было снова преобразовать в двоичный файл, чтобы я мог передать данные в твиттер (используя OAuth)без использования БД.Оказывается, вы можете твитнуть бинарный файл, который очень крутой, твиттер преобразует его обратно в изображение.
Я создал пост в блоге об этом несколько лет назад