为了账号安全,请及时绑定邮箱和手机立即绑定

使用 javascript 绘制带有背景图像的画布文本

使用 javascript 绘制带有背景图像的画布文本

aluckdog 2023-07-06 15:19:45
我在绘制画布时需要实现这一点:首先我用画布绘制图像作为背景然后用另一张图像的颜色绘制文本=> 问题是 bg-image 与 text-img 重叠这是我的代码:window.onload = function() {    var canvas = document.getElementById("myCanvas");    var ctx = canvas.getContext("2d");    var img1 = document.getElementById("bg-img");        var img2 = document.getElementById("text-img");    // draw the first image as background    ctx.drawImage(img1, 0, 0);    // put text on canvas    ctx.save();    ctx.beginPath();       ctx.font = "50pt Verdana";    ctx.fillText("XBOX", 10, 100);    ctx.fill();    // use compositing to draw the background image    // only where the text has been drawn    ctx.beginPath();    ctx.globalCompositeOperation = "source-atop";    ctx.drawImage(img2, 0, 0, img2.width, img2.height, 0, 0, canvas.width, canvas.height);    ctx.restore();    };<p>Image to use:</p><img id="bg-img" src="http://www.html5canvastutorials.com/demos/assets/darth-vader.jpg" alt=""><img id="text-img" src="http://www.html5canvastutorials.com/demos/assets/yoda.jpg" alt=""><p>Canvas:</p><canvas id="myCanvas" width="220" height="297"style="border:1px solid #d3d3d3;"></canvas>测试链接: http: //jsfiddle.net/1x5dfgty/14/
查看完整描述

1 回答

?
翻阅古今

TA贡献1780条经验 获得超5个赞

在“destination-over”模式下使用globalCompositeOperation允许您在画布上绘制背景:

function onReady() {

    var canvas = document.getElementById("myCanvas");

    var ctx = canvas.getContext("2d");

    var img1 = document.getElementById("bg-img");

    var img2 = document.getElementById("text-img");

    // draw the first image as background

    // uncomment this to see the problem

    ctx.save();

    ctx.beginPath();

    // put text on canvas

    ctx.font = "50pt Verdana";

    ctx.fillText("XBOX", 10, 100);

    ctx.fill();

    // use compositing to draw the background image

    // only where the text has been drawn

    ctx.closePath();

    ctx.globalCompositeOperation = "source-atop";

    ctx.drawImage(img2, 0, 0, img2.width, img2.height, 0, 0, canvas.width, canvas.height);

    ctx.restore();

    ctx.globalCompositeOperation = 'destination-over';

    ctx.drawImage(img1, 0, 0);

    //ctx.drawImage(img1, 0, 0, img1.width, img1.height, 0, 0, canvas.width, canvas.height); // Stretch to fit image

}

window.addEventListener("load", onReady);

<p>Image to use:</p>


<img id="bg-img" src="//www.html5canvastutorials.com/demos/assets/darth-vader.jpg" alt="">

<img id="text-img" src="//www.html5canvastutorials.com/demos/assets/yoda.jpg" alt="">


<p>Canvas:</p>


<canvas id="myCanvas" width="220" height="297"

style="border:1px solid #d3d3d3;">

</canvas>



查看完整回答
反对 回复 2023-07-06
  • 1 回答
  • 0 关注
  • 158 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信