簡體   English   中英

使用畫布中的數據將圖像保存到保管箱

[英]Save image to dropbox with data from canvas

我正在嘗試將畫布數據作為圖像(png)寫到我的保管箱。 我設法從畫布上獲取數據並將文件保存到保管箱,但該文件不是它接縫的圖像文件。

根據文檔,圖像數據應轉換為arrayBuffer。 我正在使用在Stackoverflow上找到的功能,但似乎無法正常工作。 有人知道我在做什么錯嗎?

function _str2ab(str) {
    var buf = new ArrayBuffer(str.length*2); // 2 bytes for each char
    var bufView = new Uint16Array(buf);
    for (var i=0, strLen=str.length; i<strLen; i++) {
        bufView[i] = str.charCodeAt(i);
    }
    return buf;
}

function _savePicture () {

    //Get data from canvas
    var imageSringData = canvas.toDataURL('image/png');
    //Convert it to an arraybuffer
    var imageData = _str2ab(imageSringData);

    client.writeFile('/Public/the_image.png', imageData, function(error, stat) {
    if (error) {
        console.log('Error: ' + error);
    } else {
        console.log('File written successfully!');
    }
});

這是一些保管箱文檔。 https://github.com/dropbox/dropbox-js/blob/stable/guides/snippets.md

終於可以工作了! 我使用了另一個函數將base64轉換為bufferArray並從字符串中刪除了'data:image / png; base64',並且可以正常工作。 希望這會在將來對其他人有所幫助。

function _base64ToArrayBuffer(base64) {
    base64 = base64.split('data:image/png;base64,').join('');
    var binary_string =  window.atob(base64),
        len = binary_string.length,
        bytes = new Uint8Array( len ),
        i;

    for (i = 0; i < len; i++)        {
        bytes[i] = binary_string.charCodeAt(i);
    }
    return bytes.buffer;
}

function _savePicture () {
    //Get data from canvas
    var imageSringData = canvas.toDataURL('image/png');
    //Convert it to an arraybuffer
    var imageData = _base64ToArrayBuffer(imageSringData);

    client.writeFile('/Public/the_image.png', imageData, function(error, stat) {
    if (error) {
        console.log('Error: ' + error);
    } else {
        console.log('File written successfully!');
    }
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM