【问题标题】:Convert HTML5 canvas to image link将 HTML5 画布转换为图像链接
【发布时间】:2020-09-19 18:08:44
【问题描述】:

嘿,所以我环顾四周,已经能够将我的画布转换为 dataURL 并使用此功能下载它:

function downloadImage(data, filename = 'untitled.jpeg') {
    var a = document.createElement('a');
    a.href = data;
    a.download = filename;
    document.body.appendChild(a);
    a.click();
}

在哪里

data = canvas.toDataURL("image/jpeg")

但我没有找到任何方法将画布转换为可以与全球其他人共享的图像链接。也许必须应用 post 方法,它怎么可能?我也可以使用 node.js 在线服务器

【问题讨论】:

    标签: javascript node.js image url canvas


    【解决方案1】:

    假设data = canvas.toDataURL("image/jpeg"),您可以指定带有正确标头的base64链接:

    const canvas = document.querySelector('canvas')
    const button = document.querySelector('button')
    const ctx = canvas.getContext('2d')
    
    canvas.width = window.innerWidth
    canvas.height = window.innerHeight
    
    ctx.fillStyle = 'red'
    ctx.fillRect(50, 50, 100, 100)
    
    button.addEventListener('click', () => {
      let data = canvas.toDataURL("image/jpeg");
      data = data.replace('data:image/jpeg;base64,', '')
      console.log(data)
      downloadImage(data);
    })
    
    function downloadImage(data, filename = 'untitled.jpeg') {
        const a = document.createElement('a');
        a.href = 'data:application/octet-stream;headers=Content-Disposition%3A%20attachment%3B%20filename=' + filename + ';base64,' + data;
        a.download = filename;
        document.body.appendChild(a);
        a.click();
    }
    <button>Save</button>
    <canvas></canvas>

    来源:HTML5 Canvas to PNG File

    【讨论】:

    • 此方法有效,但文本文件很长,我想将其与 socket.io (websocket) 共享给其他客户端,您知道有什么方法可以简化吗? @Treast
    • base64 是在套接字上发送图像的更简单方法之一,因为它只是一个要发送的字符串。如果字符串太长,可以尝试在获取DataURL之前调整画布大小,或者降低JPEGlet data = canvas.toDataURL("image/jpeg", 0.4); // 40% for example的质量。
    • 我一直在使用它,(我知道它已经有一段时间了,但我正在为一个项目提前计划)并且似乎质量百分比不会影响质量,我已经比较了一个canvas.toDataURL("image/jpeg", 1) 和一个canvas.toDataURL("image/jpeg", 0.01) 字符串的大小和质量都是一样的,请问您知道问题出在哪里吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-01
    • 1970-01-01
    • 2011-03-02
    • 2011-12-26
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多