我有一张以base64编码的图片,我需要同步地在画布上绘制它。看一下我之前写的代码:
//convert base64 to actual Image()
var input = new Image();
input.src = dataurl;
//draw on canvas
var w = input.width, h = input.height;
canvas.width = w; canvas.height = h;
ctx.drawImage(input, 0, 0)
这在Chrome上曾经可以工作。我知道假设浏览器能够在下一个指令之前完成加载并不是一个好的实践,但它确实可以工作。在几次更新之后,它最终失败了。
我无法监听“load”事件,因为那会使其变成异步的。由于这是一个生成器函数,并且我需要同步返回canvas,所以这并不好。程序是围绕它构建的,将其变成异步将意味着完全重写。那不好。
input.src = dataurl;
while(!input.width){ /* busy wait */ }
var w = input.width, h = input.height;
由于浏览器在我的代码执行完成之前不会更新它,所以这种方法无法使用。
目前我真的想不出任何解决这个困境的办法,因此非常感谢您的建议。(请注意,datauri是从另一个画布生成的,我可以访问该画布。)
image.onload
内执行? - markE<canvas>
而不是base64格式的图像。 - Derek 朕會功夫