Сохранить захваченный png как arraybuffer


Я пытаюсь сохранить изображение в dropbox, и у меня возникли проблемы с корректным преобразованием. У меня есть img (захваченный с помощьюэтого образца), и я хочу сохранить его в dropbox, который принимает ArrayBuffer (образец здесь)

Это код, который я нашел, что должен к двум преобразованиям, сначала в base64, а затем в ArrayBuffer

    function getBase64Image(img) {
    // Create an empty canvas element
    var canvas = document.createElement("canvas");
    canvas.width = img.width;
    canvas.height = img.height;

    // Copy the image contents to the canvas
    var ctx = canvas.getContext("2d");
    ctx.drawImage(img, 0, 0);

    // Get the data-URL formatted image
    // Firefox supports PNG and JPEG. You could check img.src to
    // guess the original format, but be aware the using "image/jpg"
    // will re-encode the image.
    var dataURL = canvas.toDataURL("image/png");

    return dataURL.replace(/^data:image/(png|jpg);base64,/, "");
}

function base64ToArrayBuffer(string_base64) {
    var binary_string = window.atob(string_base64);
    var len = binary_string.length;
    var bytes = new Uint8Array(len);
    for (var i = 0; i < len; i++) {
        var ascii = binary_string.charCodeAt(i);
        bytes[i] = ascii;
    }
    return bytes.buffer;
}

Сохранение начинается так

     var img = $('#show-picture')[0];
    var data = base64ToArrayBuffer( getBase64Image(img));
    dropbox.client.writeFile(moment().format('YYYYMMDD-HH-mm-ss')+'.png', data, function (error, stat) {
        if (error) {
            return dropbax.handleError(error);
        }
        // The image has been succesfully written.
    });

Проблема в том, что я получаю поврежденный сохраненный файл и немного путаюсь в том, что неправильный.

*EDIT *

Вот ссылка на исходный файл https://www.dropbox.com/s/ekyhvu2t6d8ldh3/original.PNG а вот к испорченным. https://www.dropbox.com/s/f0oevj1z33brpur/20131219-22-23-14.png

Я использую эту версию dropbox.js: //cdnjs.cloudflare.com/ajax/libs/dropbox.js/0.10.2/dropbox.min.js

Как вы можете видеть поврежденный slighty больше 23,3 КБ против 32,6 КБ Спасибо за любую помощь

Ларси

1 2

1 ответ:

Перемещаю свой комментарий к ответу, так как кажется, что это работает в последнем хранилище данных JS SDK, но, возможно, не в dropbox.Яш 0.10.2.


Какой браузер и какая версия библиотеки Dropbox? И что не так с сохраненным изображением? (Я предполагаю, что под "поврежденным" вы подразумеваете, что он не откроется в любом инструменте, который вы используете... еще какие-нибудь намеки? Является ли размер файла разумным?) Я только что сделал очень похожий тест (toDataURL, atob и Uint8Array) с Chrome на OS X и dropbox.com/static/api/dropbox-datastores-1.0-latest.js и это, кажется, работает.