HTML5 Canvas - 如何在图像背景上画一条线?

Posted

技术标签:

【中文标题】HTML5 Canvas - 如何在图像背景上画一条线?【英文标题】:HTML5 Canvas - How to Draw a line over an image background? 【发布时间】:2012-05-24 07:39:26 【问题描述】:

我正在尝试在图像背景上画一条线 - 在 html5 Canvas 中。 然而,总是在图像后面画线。实际上,首先绘制线条,然后绘制图片 - 无论我如何调用函数。

如何将线条置于图像顶部?

var canvas = document.getElementById("myCanvas");
        var context = canvas.getContext("2d");
            context.clearRect(0, 0, canvas.width, canvas.height);
drawbackground(canvas, context); 
drawlines(canvas, context); 


function drawbackground(canvas, context)

    var imagePaper = new Image();


        imagePaper.onload = function()


            context.drawImage(imagePaper,100, 20, 500,500);
        ;

      imagePaper.src = "images/main_timerand3papers.png";




function drawlines(canvas, context)


            context.beginPath();
            context.moveTo(188, 130);
            context.bezierCurveTo(140, 10, 388, 10, 388, 170);
            context.lineWidth = 10;
            // line color
            context.strokeStyle = "black";
            context.stroke();

【问题讨论】:

【参考方案1】:

完全未经测试的代码,但你尝试过这样的事情吗?

function drawbackground(canvas, context, onload)

    var imagePaper = new Image();


        imagePaper.onload = function()


            context.drawImage(imagePaper,100, 20, 500,500);
            onload(canvas, context);
        ;

      imagePaper.src = "images/main_timerand3papers.png";

然后像这样调用方法...

 drawbackground(canvas, context, drawlines);

【讨论】:

最后一行是否应该是drawlines(canvas, context, drawlines(canvas,context)); ? 不,因为在这种情况下,您将调用方法“drawlines”,然后使用其返回值作为参数。【参考方案2】:

为了提高效率,假设您要对这条或多条线进行多次重绘,请将画布的 CSS background-image 设置为您的图像。

<canvas style="background-image:url('images/main_timerand3papers.png');"></canvas>

【讨论】:

谢谢西蒙。但我还需要对背景进行一些动态更改。因此我没有使用 CSS 属性。【参考方案3】:

将您的图像 onload 更改为以下内容:

imagePaper.onload = function () 
    context.drawImage( imagePaper, 100, 20, 500, 500 );
    drawLines( canvas, context );
;

然后确保删除之前对drawLines 的调用。

此解决方案的重要内容是 onload 函数将在未来某个时间执行,而 drawLines 函数将立即执行。您必须始终小心构建回调的方式,尤其是在嵌套它们时。

【讨论】:

这个答案值得更多的支持,因为它有解释【参考方案4】:

或者你可以试试这个:

drawbackground(canvas, context);
context.globalCompositeOperation = 'destination-atop';
drawlines(canvas, context);

【讨论】:

以上是关于HTML5 Canvas - 如何在图像背景上画一条线?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 fabric.js 在画布上画一条线

ios如何在drawrect方法中在图像上画一条线

在 svg 图像上画一条线

在 JPEG 图像上画一条简单的线

玩转 html5 ---- 用 canvas 结合脚本在画布上画简单的图 (html5 又一强大功能)

在 UIViewController 上画一条线