Javascript 如何将图像同步绘制到画布

Javascript 如何将图像同步绘制到画布,javascript,image,canvas,base64,data-uri,Javascript,Image,Canvas,Base64,Data Uri,我有一个用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) 这是在Chr

我有一个用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
事件,因为这会使它异步,这不好,因为这是一个生成器函数,我需要同步返回画布。程序是围绕它构建的,使其异步意味着完全重写。那不好


尝试

input.src = dataurl;

while(!input.width){ /* busy wait */ }

var w = input.width, h = input.height;
不工作,因为在我的代码完成执行之前浏览器不会更新它



现在我真的想不出任何办法来解决这个难题,所以任何意见都是非常感谢的。(请注意,datauri是从另一个画布生成的,我可以访问该画布。)

在加载之前,不可能将图像绘制到画布上,这意味着等待加载事件。这意味着您无法将数据URI同步加载到DOM映像中,因此需要将API转换为异步API

唯一的另一种方法是使用基于JavaScript的图像解码器,将数据URI转换为对象,这不是一件小事,需要用户加载更多的代码

以前有一种不同的黑客技术,涉及
innerHTML
,它可以工作,但现在也不工作了

现在坏掉的例子:

var base64='数据:image/png;base64,2月2日,中国政府发布了一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的研究项目,一个新的一个新的研究项目,一个新的一个新的研究项目,一个新的一个新的项目,一个新的一个新的一个新的研究项目,一个新的项目,他们的一个新的一个新的一个项目,他们的一个新的一个项目,一个新的一个新的一个项目,一个新的一个新的一个项目,一个新的一个新的一个新的一个项目,他们的一个,他们的一个,他们的一个在在他们的一个,他们的一个,他们的一个在伊亚吉卡吉4.JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJUMC8IIHHTCE1NOKRVY3VTZW50SU2.一种新的研究方法是一种新的研究方法。一种新的研究方法是一种新的研究方法,一种新的研究方法是一种新的研究方法。一种新的研究方法是一种新的研究方法。一种新的研究方法是一种新的研究方法,一种新的研究一种新的研究方法是一种新的研究2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2先生2.在中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的一个中国的中国的中国的一个中国的中国的中国的中国的中国的一个中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的中国的OAHXDGICBDCPAQ4.一个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8个8 WJU1ZPUOJYGXIVZ5SR+G1B9tGyZ48月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8日,一家媒体8月8月8日,一家媒体8月8月8日,一家媒体,一家媒体,一家媒体,一家媒体,一家8月8号,一家媒体,一家媒体,一家媒体,一家,一家,一家媒体,一家媒体,一家8月8月8号,一家,一家媒体,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,一家,+3Z+0JG9ANLXYTG64MYTXDZZZO73KNRFIUA24P2.研究发现了一种新的研究方法:QX7/QQQX7/QQQJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJVVVVVVVVVVVVVQQQQQQQJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ7PGW+M5njSsV8L3/eqODfQ37HytQDw+gs+221i828XRV46)BBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBBB/0MZJC5WW0CBWIXVE0OWL0PONLS2VP6MEV9N6RK5HV2.2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 4 4 4 4 4 4 4 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 7 6 6 6 6 6 6 6 6 6 6 6 6 6 6 6 B3ZP4ELKAERJAXTKGJEAZMLF/C7JekRY2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2 2+2 2+2 2+2 2+2 2+2 2+2 2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+2+O52FFOGW8COGxGE2.一个新的研究,一个新的研究,一个新的研究,一个新的研究,一个新的研究,一个新的研究,一个BQQQQQQQQQFBBBBQQQQQQQQQFBBBBBBBQQQQQQQQQQQQQFBBBBBBBBBBBBBBBBQQQQQQQQQQQQQQQQQBQQQQQQQQQQQQQQQQQQQQQQQQQQQQFGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGGM++++++++++一+一个(2+一个新一个新的一个新的一个新的一个新的,一个新的一个新的,一个新的,一GSBPGMKWXG0HU0+a3JNtBj3dp2KGOohxxlC4.中国政府对目前的一些非政府部门的非政府非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府部门非政府+Xn061xq8O4V2Z4HnAYR+fY7Lp+/bwBrzWMdsrn7W51GA/IQDJF48WDO2XILECHUBJ2BNRS/EiwdnYLRyfBK2MwXwUMcg2rTIBrcrHcadvSeckklgDmy49On6YTyAh/KC0Y4Pu8+tPkSPzvSIBuQz/fwZAV7vYLSDHu9y63vxBSuIHq9baT
 return new Promise(resolve => {

          image.onload = function () {
                ctx.drawImage(input, 0, 0)
                resolve('resolved');
             }

    });