canvas.toDataURL("image/png") - 它是如何工作的以及如何优化它

2024-03-29

我想知道是否有人知道如何

canvas.toDataURL("image/png"); 

作品?我想更好地理解,因为有时它似乎确实降低了我的计算机速度。 有没有办法在之前、期间或之后优化 Base64 图像以获得更好的性能?

function base64(url) {
    var dataURL;
    var img = new Image(),
        canvas = document.createElement("canvas"),
        ctx = canvas.getContext("2d"),
        src = url; 
    img.crossOrigin = "Anonymous";
    img.onload = function () {
        canvas.height = img.height;
        canvas.width = img.width;
        ctx.drawImage(img, 0, 0);
        var dataURL = canvas.toDataURL('image/png');
        preload(dataURL);
        canvas = null;
    };
    img.src = url;
}

基本上这是我的功能,但我想看看是否有办法让这个过程执行得更好,或者是否有 canvas.toDataURL('image/png'); 的替代方案。

thanks


toDataURL()调用时(同步)执行以下操作:

  • 根据请求或支持的文件类型创建文件头(默认为 PNG)
  • 根据文件格式压缩位图数据
  • 将生成的二进制文件编码为 Base-64 字符串
  • 前置 data-uri 标头并返回结果

将 data-uri 设置为源时(异步):

  • 字符串已验证
  • Base-64部分被分离并解码为二进制格式
  • 二进制文件经过验证然后解析并解压缩
  • 将生成的位图设置为 Image 元素并调用适当的回调

这些都是耗时的步骤,并且由于它们是内部的,因此我们无法以任何理由利用它们。由于它们在给定的工作环境下得到了相当优化,因此我们几乎无法对其进行优化。

您可以使用 JPEG 与 PNG 来尝试不同的压缩方案。他们使用非常不同的压缩技术,根据图像大小和内容,在各种情况下,一种压缩技术可能比另一种更好。

我的2分..

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

canvas.toDataURL("image/png") - 它是如何工作的以及如何优化它 的相关文章

随机推荐