javascript - 递归图像处理(Canvas、HTML5、Javascript)

标签 javascript html graphics canvas

我正在尝试使用 Canvas 进行分形算法,该算法需要绘制一些东西,然后捕获该图像,绘制它的一些损坏的副本,然后捕获图像,等等。我但遇到了问题,因为 toDataURL() 似乎导致清屏命令(“clearRect”)或恢复转换矩阵命令(“restore”)失败。

下面的代码旨在绘制一个黑色正方形,然后将 Canvas 复制到名为“img”的变量中,向下和向右平移,然后将“img”粘贴到新位置。结果应该是两个正方形。但相反,它是第一个 1 个方格,然后是 2 个方格,然后是 3 个方格,然后是 4 个……(然后它超出了范围,但大概它仍然在复制页面上的方格。)

任何帮助将非常非常感谢。

这里是正在运行的代码的链接:https://www.msu.edu/~brown202/dataURLproblem.html

代码如下:

    <html>
        <head>
            <script type="application/x-javascript">
                function draw() {
                    var canvas = document.getElementById("fractal");
                    if (canvas.getContext) {
                        var ctx = canvas.getContext("2d");
                        var img;
                        ctx.clearRect(0,0,400,400);    // clear the canvas, which measures 400 by 400
                        ctx.fillRect (0,0,100,100);    // draw a square
                        ctx.save();
                            img = canvas.toDataURL();    // store the canvas image in "img"
                            ctx.translate(100,100);      // shift picture
                            ctx.drawImage(img, 0,0);    // draw the stored image of the canvas in the new place
                        ctx.restore();
                    }
                }
                function init() {
                    setInterval(draw,500);          // repeat every 500 ms.
                }
            </script>
        </head>
        <body onload="init();">
            <canvas id="fractal" width="400" height="400">
                <p>This animation requires a browser that supports the
                <a href="http://www.w3.org/html/wg/html5/">HTML5</a> 
                &lt;canvas&gt; feature.</p>
            </canvas>
        </body>
    </html>

最佳答案

如果您在页面运行时查看 JavaScript 控制台,它会生成错误:

Uncaught TypeError: Type error

这是因为当 drawImage 函数运行时,您尝试将字符串(图像的 dataURL 版本)传递给 drawImage期待图像/ Canvas 。

drawImage 函数可以接受 canvas 元素作为其参数,这将执行您想要的操作。

而不是这样做:

img = canvas.toDataURL();
ctx.drawImage(img, 0,0);

就这样做:

ctx.drawImage(canvas, 0,0);

关于javascript - 递归图像处理(Canvas、HTML5、Javascript),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7219268/

相关文章:

javascript - 在java中使用jsoup保存网页src和链接

javascript - <head> 中应包含哪些 JavaScript,<body> 中应包含哪些内容?

Python 图像库使图像偏红

android - 跟随手指移动可绘制对象

c++ - UE4中简单坐标变换结果不正确

javascript - 有没有办法在 javascript 对象中代理变量?

javascript - 防止文档事件监听器触发?

javascript - Express 是否要求我使用 POST 路由进行删除?

javascript - 为什么 alert($ ("#myHTMLElement")) 显示其原始属性,即使我已经通过事件对其进行了变异?

javascript - 循环返回非常长的数组,即使它循环了 3 次?