Javascript canvas.toDataURL(“image/png”)-它是如何工作的以及如何优化它的
我想知道是否有人知道怎么做Javascript canvas.toDataURL(“image/png”)-它是如何工作的以及如何优化它的,javascript,canvas,Javascript,Canvas,我想知道是否有人知道怎么做 canvas.toDataURL("image/png"); 工作?我想更好地理解,因为有时它似乎真的会让我的电脑慢下来。 是否有方法在之前、期间或之后优化base64映像以获得更好的性能 function base64(url) { var dataURL; var img = new Image(), canvas = document.createElement("canvas"), ctx = canvas.
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')
感谢toDataURL()
在调用时(同步)执行以下操作:
- 根据请求或支持的文件类型创建文件头(默认为PNG)
- 基于文件格式压缩位图数据
- 将生成的二进制文件编码为Base-64字符串
- 在数据uri头前面加上前缀并返回结果
- 字符串已验证
- Base-64部分被分离并解码为二进制格式
- 二进制文件验证,然后解析和解压缩
- 结果位图设置为Image元素并调用正确的回调
我的2美分..高性能替代品是。它速度极快、异步,并产生一个blob,该blob也可以交换到磁盘,从主观上说,它更有用。
不幸的是,它是在Firefox中实现的
仔细地做了基准点标记后,就没有办法了,因为canvas.toDataURL本身就是数量级的瓶颈。谢谢,我会尝试使用不同的基准点,看看我的性能有什么不同。是否有更进一步的压缩Base-64字符串的方法,使其具有更少的颜色或像素?你还知道另一种选择吗?@naeluh不,base-64只是编码的二进制数据(文件本身),与图像本身无关。JPEG将保存RGB,而PNG将保存RGBA。但是jpeg使用的是有损压缩,而PNG则不是,所以你需要根据它来加权。现在Chrome支持它。