gpt4 book ai didi

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

转载 作者:技术小花猫 更新时间:2023-10-29 12:01:36 25 4
gpt4 key购买 nike

我的部分应用包括混合使用标准 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com