【问题标题】:Draw a canvas into another canvas not working将画布绘制到另一个画布不起作用
【发布时间】:2012-07-12 02:31:56
【问题描述】:

我正在尝试在另一个画布上绘制通过 javascript 创建的画布。但这对我不起作用,

这是我的代码,

    <!DOCTYPE HTML>
<html>
  <head>
    </script>
       <script>
        window.onload = function(){  
        var can1 = document.createElement('canvas');
        can1.width = 150;
        can1.height = 140;
        can1.style.cssText = 'top:2px;left:2px;border:2px  solid black;';

        var ctx1 = can1.getContext('2d');
        var img=new Image();
        img.src="images/211.jpg"
        ctx1.drawImage(img,0,0);

        var can = document.getElementById("c");
        var ctx = can.getContext('2d');
        ctx.drawImage(can1,0,0);
        var canvas =  document.getElementById("c"); 
        window.open(canvas.toDataURL());
        }

    </script>
</head>
<body >
    <canvas id="c" style = "position:absolute;top:150px;width:250px;height:350px;left:500px; border:2px  solid black;"></canvas>
</body>
</html>

【问题讨论】:

  • 为什么你认为它不起作用?顺便说一句,您没有在 can1 中绘制任何内容。
  • 我已经尝试通过将图像绘制到 can1.还是在上面的代码中,画布的边界应该会出现!
  • “边界”是什么意思?如果没有内容,则不绘制内容,边框不属于内容。

标签: javascript css html html5-canvas


【解决方案1】:

我认为问题在于,当您尝试将该图像绘制到画布中时,图像还没有准备好。所以如果你这样做,它会完美地工作:

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
      #myCanvas {
        border: 1px solid #9C9898;
      }
    </style>
    <script>
      window.onload = function() {

        var imageObj = new Image();
        imageObj.src = "http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg";

        var dynamicCanvas = document.createElement("canvas");
        var dynamicContext = dynamicCanvas.getContext("2d");
        dynamicCanvas .height="400";
        dynamicCanvas.width="578";

        var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");

        imageObj.onload = function() {
          dynamicContext.drawImage(imageObj, 69, 50);
          context=context.drawImage(dynamicCanvas,69,50);
          window.open(canvas.toDataURL());
        };
      };

    </script>
  </head>
  <body>
    <canvas id="myCanvas" width="578" height="400"></canvas>
  </body>
</html>

您可以调整动态画布的高度和宽度。

如果你删除那个 window.open 语句,它就完美了。

但是canvas.toDataURL()有问题

当您尝试对本地文件执行 canvas.toDataURL() 时,会出现安全错误(如果您通过谷歌浏览器检查它),即

Uncaught Error: SECURITY_ERR: DOM Exception 18 

您可以了解有关此错误的更多信息:here (看看您是否收到此错误)。无论如何,根本原因已经解决,现在完全有一个新问题:D..无论如何祝你好运!

【讨论】:

    【解决方案2】:

    使用 MJQ 的原始代码显示不正确的图像的问题是他没有直接通过属性说明第二个画布的大小 - 仅通过样式。因此浏览器创建了一个默认大小的画布(FF 为 300x150),然后将其拉伸到 250x350。

    所以下面的修改会解决图片显示问题:

    <canvas id="c" width="250" height="350" style = "position:absolute;top:150px;width:250px;height:350px;left:500px; border:2px  solid black;"></canvas>
    

    也许这会对将来的某人有所帮助。

    【讨论】:

      【解决方案3】:

      你在做什么?您的代码正在运行。

      (如果您的问题正确)我在

      之后添加了以下几行
      can1.style.cssText='border:2px solid black;';
      

      :

              var ctx1 = can1.getContext('2d');
              ctx1.rect(50, 50, 500, 500);
              ctx1.fillStyle = '#8ED6FF';
              ctx1.fill();
      

      执行后,我看到里面有一个漂亮的矩形! 你用的是支持html5的浏览器吗??

      【讨论】:

      • 好的。我试过了,它工作正常。但是如果我在画布中绘制图像并将该画布绘制到另一个画布中,它就不会出现!
      • 好的。我已经更新了上面的代码。图像显示但不正确。大小不显示为 150,140。在 window.open(canvas.toDataURL());当新标签打开时,它会正确显示!
      猜你喜欢
      • 1970-01-01
      • 2013-01-22
      • 2017-10-26
      • 1970-01-01
      • 1970-01-01
      • 2016-03-03
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      相关资源
      最近更新 更多