【发布时间】:2020-11-18 03:40:24
【问题描述】:
当我第一次使用另一个画布作为绘图源时,我看到画布绘制速度很慢。在我交换图像之前,后续的画布到画布 .drawImage 调用都很好(然后我再次看到同样的问题)。
下面的示例代码 - 加载了一个图像,然后创建了 4 个画布,第一个画布是从图像本身绘制的,第二个画布是从第一个画布绘制的,等等。创建画布后,源图像被交换并代码再次运行。
var sourceImage = new Image(); // Original image
var myImages = []; // Array of image and canvases references
myImages[0] = sourceImage; // Set first myImage to image source
// Image onload
sourceImage.onload = function () {
console.log("Imageload", new Date() - t0);
myImages[0] = sourceImage;
// Loop to create and draw on canvases
for (var i = 1; i <= 4; i += 1) {
// Create canvas
myImages[i] = document.createElement("canvas");
// Set canvas dimensions to same as original image
myImages[i].width = myImages[0].width;
myImages[i].height = myImages[0].height;
// Draw last canvas / image onto this canvas
t0 = new Date();
myImages[i].getContext("2d").drawImage(
myImages[i - 1],
0,
0,
myImages[i].width,
myImages[i].height
);
console.log("drawImage", i, new Date() - t0);
}
// Finished with black.jpg so load white.jpg
if (sourceImage.getAttribute("src") == "images/black.jpg") {
sourceImage.src = "images/white.jpg"
}
}
// Load image
t0 = new Date();
sourceImage.src = "images/black.jpg"
控制台输出是...
Imageload 36
drawImage 1 0
drawImage 2 255
drawImage 3 0
drawImage 4 0
Imageload 35
drawImage 1 0
drawImage 2 388
drawImage 3 1
drawImage 4 1
我的问题是为什么第二张画布绘制缓慢?我尝试了各种图像文件和不同的画布大小,但总是看到相同的结果。我在 Chrome 和 Safari 上测试过。
如果缓慢绘制是在第一个画布上,我可以接受,尽管 .onload 被触发,但图像仍然存在一些问题。但是第二个画布上的速度很慢,即第一个画布是从图像中绘制的,没有问题。
【问题讨论】:
标签: javascript image canvas drawimage