代码之家  ›  专栏  ›  技术社区  ›  Mia Davis

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

  •  0
  • Mia Davis  · 技术社区  · 6 年前

    我有3幅油画。我从canvas1裁剪一个区域并将其显示在画布2上。然后我想将Canvas2图像转换为一个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>
    
    0 回复  |  直到 6 年前
        1
  •  1
  •   Maxim Khanov    6 年前

    您的解决方案不起作用的原因是您没有等待 onload 事件。在 重载 事件图像将不呈现。

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

    然后,要将数据URL转换回画布图像,首先必须创建一个image元素,并将其源设置为dataURL。在得到图像之后 重载 事件可以将图像绘制到画布上。如图所示:

    假设数据URL位于一个名为data url的变量中,画布上下文位于一个名为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:不必通过指定宽度和高度来缩放图像对象,画布将在指定目标宽度和高度时进行缩放。