如何将dataurl转换回图像并显示在画布上

时间:2019-06-12 08:18:55

标签: javascript html html5-canvas

我有3幅画布。我从canvas1裁剪区域并将其显示在canvas 2上。然后,我想将canvas 2图像转换为URL,并查看是否可以将该URL转换回图像。我希望将其显示在画布c4中。感谢您的帮助。

// image is drawn here , I want this image to be converted to a dataURL 
//then back to image and display it in canvas c4
var c2 =  document.getElementById("area_c2");

 var ctx = c.getContext("2d");
 var ctx2 = c2.getContext("2d");
 image_src.width = c2.width;
 image_src.height = c2.height;

ctx2.drawImage(image_src, 0, 0,image_src.width, image_src.height);




 var c4 =  document.getElementById("area_c4");
 var ctx4 = c4.getContext("2d");

 var dataURL = c2.toDataURL();

 var myImg = new Image;

 myImg.src = dataURL;

 myImg.width = c4.width;
 myImg.height = c4.height;

 ctx4.drawImage(myImg, 0, 0, image_src.width, image_src.height); //Image //is not displayed here , I want the image to take the size of the canvas


  <canvas  id ="area_c2" style="width:300px;height:300px;border:3px solid 
  black;z-index:1"  >
  </canvas>


 <canvas id ="area_c4" style="width:300px;height:300px;border:3px solid 
   black;z-index:1;background:red">
 </canvas>

1 个答案:

答案 0 :(得分:1)

您的解决方案不起作用的原因是因为您没有等待onload事件。在onload事件之前,图像将不会呈现。

要将画布转换为数据URL很简单,请使用canvas元素的.toDataURL();方法。

然后要将数据URL转换回画布图像,首先必须创建一个Image元素并将其源设置为dataURL。获取图像onload事件后,您可以将图像绘制到画布上。可以完成如下所示:

假设数据URL在名为dataURL的变量中,则画布上下文在名为ctx的变量中。

var img = new Image;
img.onload = () => { ctx.drawImage(img, 0, 0); };
img.src = dataURL;

最终解决方案如下:

var cdata2 = c2.toDataURL();
var cimg2 = new Image;
cimg2.onload = () => { ctx4.drawImage(cimg2, 0, 0, c4.width, c4.height); };

PS:您不必通过指定宽度和高度来缩放图像对象,当您指定目标宽度和高度时,画布会这样做。