javascript - html5 Canvas getImageData 或 toDataURL 的结果 - 哪个占用更多内存?

标签 javascript html canvas

我的部分应用包括混合使用标准 2d 上下文 Canvas 和 webGL 的 html5 照片编辑。

无论如何,当用户正在处理他们的照片时,我正在保存“撤消”状态。这些都作为 base64 图像数据存储在 Javascript 对象中。

一切正常,性能良好。

但是我想知道从 getImageData 存储数据是否会占用更少的内存或提供更好的性能?

总结一下我的问题是:

toDataURL() 生成的 base64 jpeg 或 getImageData() 的结果哪个占用更多内存空间?两者之间是否存在任何性能差异(关于加载到 Canvas 上,以及从 Canvas 上拉出数据)

提前致谢。

最佳答案

getImageData() 比 toDataURL() 占用更多内存

  • ImageData是像素数组,是图像最大的信息,像素数组的长度是widthOfImage * heightOfImage * 4,例如100维图像的imageData长度是var imageDataArrayLenth = 100 * 100 * 4 = 40 000(字节);
  • BLOB(JPG 或 PNG) 是使用 jpg 或 png 算法压缩的图像数据,其大小可以比图像数据小 10 或 20 倍(取决于图像内容)。
  • DataURL (BASE64)是imageData压缩成JPG或PNG,然后转成字符串,这个字符串比BLOB大37%(info)。

结论:更好的方法是使用BLOB ( info )。

//Example of using blob with objectURL
var canvas = document.getElementById("canvas");

canvas.toBlob((blob) => {
  let img = new Image();
  img.onload = () =>  URL.revokeObjectURL(img.src);  // no longer need to read the blob so it's revoked
  img.src = URL.createObjectURL(blob);
  document.body.appendChild(img);
});

关于javascript - html5 Canvas getImageData 或 toDataURL 的结果 - 哪个占用更多内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11896740/

相关文章:

javascript - 如何在使用 jquery 键入时删除类

javascript - 根据第一个下拉值清除第二个下拉值

javascript - 在 JavaScript 中渲染灯光非常慢。任何想法?

javascript - 将事件绑定(bind)到 Canvas 上的形状

android - 在 Canvas 上绘制的 View 上设置 onClickListener

javascript - 如何使用 touchstart 和 touchend 事件跟踪移动设备上跨域 iframe 的点击

javascript - 在 Ionic 应用程序中发送电子邮件会导致以下错误 : TypeError: $cordovaEmailComposer. isAvailable is not a function

javascript - 一个简单的 JavaScript 计算,用于在表单字段中显示结果

html - 在 Edge 和 IE 上打印时 HTML 上的不同元素顺序

javascript - 使用javascript下载excel文件后停止屏幕位置上升