【问题标题】:Draw jpeg array directly onto a Canvas将 jpeg 数组直接绘制到 Canvas 上
【发布时间】:2015-07-19 03:48:03
【问题描述】:

目前,我从信号器连接中获取 JPEG 的字节数组并将其加载到图像中,并在 image.onload 事件中将图像绘制到画布上。

所以:

desktopImage.onload = function () {
    myCanvasContext.drawImage(desktopImage, 0, 0);
}

chat.client.broadcastMessage = function (jpeg) {
    desktopImage.src = 'data:image/jpeg;base64,' + jpeg;
}

哪个效果好。

我想知道是否可以通过将图像直接绘制到画布上来“加速”这个过程,而无需首先将其加载到图像中。

有可能吗?

【问题讨论】:

    标签: javascript image-processing html5-canvas


    【解决方案1】:

    如果您收到一个字节数组,假设是 ArrayBuffer,您可以将其包装为 Blob 对象并为其创建一个对象 URL。这将大大节省编码和解码 Base-64 的开销:

    示例:

    var desktopImage = new Image();
    var url;
    
    desktopImage.onload = function () {
        myCanvasContext.drawImage(desktopImage, 0, 0);
        (URL || webkitURL).revokeObjectURL(url);  // release memory
    }
    
    // assuming jpeg = ArrayBuffer:
    chat.client.broadcastMessage = function (jpeg) {
        var blob = new Blob([jpeg], {type: "image/jpeg"});
        url = (URL || webkitURL).createObjectURL(blob);
    
        desktopImage.src = url;
    }
    

    【讨论】:

    • 嗨,我现在就试试这个。谢谢
    • 您好,我收到错误消息:未捕获的类型错误:无法构造“Blob”:提供的第一个参数为 null 或无效的 Array 对象。
    • 'jpeg' 不为空。是否需要从 jpeg 字节数组到 ArrayBuffer 进行转换?
    • 如果你使用console.log(jpeg),控制台会说什么?
    • snaphot:/ 9J / 4AAQSkZJRgABAQEAYABgAAD / 2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aHBwgJC4nICIsIxwcKDcpLDAxNDQ0Hyc5PTgyPC4zNDL / 2wBDAQkJCQwLDBgNDRgyIRwhMjIyMjIyMjIyMjIyMjIyMjIyMj 跨度>
    猜你喜欢
    • 1970-01-01
    • 2011-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-11
    • 2015-06-21
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多