代码之家  ›  专栏  ›  技术社区  ›  John Smith

将画布图像复制到框架中

  •  0
  • John Smith  · 技术社区  · 10 年前

    作为起点,我的画布上有一幅图像:

    var canvas = $('canvas')[0];
    var ctx=canvas.getContext("2d");
    var img=document.getElementById("scream");
       ctx.drawImage(img,0,0,240,297);
    

    现在,我想在同一画布上向该图像添加一个帧。为此:

    我首先替换图像 使用框架。

    接下来,我尝试复制 此框架内的旧画布内容

    我试着这样做:

       var frame = document.getElementById("frame");
    
       var ctx = $('canvas')[0].getContext("2d");
       var dst = ctx.canvas;
    
          ctx.drawImage(frame,0,0, 240, 297);
          ctx.drawImage(dst, 40, 40);
    

    但是 代码不工作 因为它 再次复制框架 到画布而不是图像:这里可以看到演示: https://jsfiddle.net/35mxfsv0/

    我做错了什么?我需要改变什么?谢谢

    2 回复  |  直到 10 年前
        1
  •  1
  •   fuyushimoya    10 年前

    正如您刚才分配的原始 canvas dst 当你在画布上画任何东西时 数据传输系统 也将更改(因为它们指向同一画布)。

    因此,您必须将新画布分配给 数据传输系统 ,并从中绘制图像 origin 数据传输系统 ,然后在 起源 最后,将dst的图像绘制到原点。

    window.onload = function() { // Make it safe that window.onload ensures all images loaded.
      
      var canvas = $('canvas')[0];
    
      var ctx=canvas.getContext("2d");
      var img=document.getElementById("scream");
    
      ctx.drawImage(img,0,0,240,297);
    
      //START OF MY CODE
      var frame = document.getElementById("frame");
    
      // Comment out as we demo in same scope, ctx is already have what we want.
      //var ctx = $('canvas')[0].getContext("2d");
      // Create a new canvas, and draw the image on the origin canvas to it.
      var dst = document.createElement('canvas');
      dst.width = canvas.width;
      dst.height = canvas.height;
      var dstCtx = dst.getContext('2d');
      dstCtx.drawImage(canvas, 0, 0);
      // Above is what you suppose the canvas should do.
      //var dst = ctx.canvas;        
    
      // Draw frame
      ctx.drawImage(frame,0,0, 240, 297);
    
      // As your frame is not an opacity one, you have to copy to specific position.
      ctx.drawImage(dst, 0, 0, dst.width, dst.height, 10, 10, 220, 277);
    }
    img{display:none}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
    <canvas id="myCanvas" width="240" height="297" style="border:1px solid #d3d3d3;">
    </canvas>
        
        <img src="http://www.w3schools.com/tags/img_the_scream.jpg" id="scream"/>
        <img src="http://www.wpclipart.com/page_frames/picture_frames/wood_picture_frame.jpg" id="frame"/>

    然而,如果您仍然可以访问该尖叫图像,您可以先绘制帧,然后在其上绘制图像:

    var canvas = $('canvas')[0];
    
    var ctx=canvas.getContext("2d");
    var img=document.getElementById("scream");
    var frame = document.getElementById("frame");
    
    ctx.drawImage(frame,0,0, 240, 297);
    // 10, 10 seems to fit the frame.
    ctx.drawImage(img, 10, 10);
    
        2
  •  0
  •   Bikram Das    9 年前

    请更改html和js文件的id。