canvas图形的组合与裁切

当两个或两个以上的图形存在重叠区域时,默认情况下一个图形画在前一个图像之上。通过指定图像globalCompositeOperation属性的值可以改变图形的绘制顺序或绘制方式,globalAlpha可以指定图形的透明度。

globalCompositeOperation 属性设置或返回如何将一个源(新的)图像绘制到目标(已有)的图像上。

源图像 = 您打算放置到画布上的绘图。

目标图像 = 您已经放置在画布上的绘图。

ctx.globalCompositeOperation = ‘source-over‘; 默认设置

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title></title>
 6 <style type="text/css">
 7 *{padding: 0;margin:0;}
 8 body{background: #1b1b1b;}
 9 #div1{margin:50px auto; width:300px; height: 300px;}
10 canvas{background: #fff;}
11 </style>
12 <script type="text/javascript">
13 window.onload = function(){
14     var c=document.getElementById("myCanvas");
15     var ctx=c.getContext("2d");
16
17     ctx.fillStyle="red";
18     ctx.fillRect(20,20,75,50);
19     ctx.fillStyle="blue";
20     ctx.globalCompositeOperation="source-over";  //在目标图像上显示源图像。
21
22     ctx.fillRect(50,50,75,50);
23     ctx.fillStyle="red";
24     ctx.fillRect(150,20,75,50);
25     ctx.fillStyle="blue";
26     ctx.globalCompositeOperation="destination-over";  //在源图像上方显示目标图像。
27     ctx.fillRect(180,50,75,50);
28 };
29
30 </script>
31 </head>
32 <body>
33     <div id="div1">
34         <canvas id="myCanvas" width="300" height="300"></canvas>
35     </div>
36 </body>
37 </html>

结果:

属性值:

source-over 默认。在目标图像上显示源图像。
source-atop 在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。
source-in 在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。
source-out 在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。
destination-over 在源图像上方显示目标图像。
destination-atop 在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。
destination-in 在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。
destination-out 在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
lighter 显示源图像 + 目标图像。
copy 显示源图像。忽略目标图像。
source-over 使用异或操作对源图像与目标图像进行组合。

eg:

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title></title>
 6 <style type="text/css">
 7 canvas{border:1px solid #d1d1d1; margin:20px 20px 20px 0}
 8 </style>
 9
10 </head>
11 <body style="margin: 50px;">
12 <script type="text/javascript">
13
14     var gco=new Array();
15     gco.push("source-atop");
16     gco.push("source-in");
17     gco.push("source-out");
18     gco.push("source-over");
19     gco.push("destination-atop");
20     gco.push("destination-in");
21     gco.push("destination-out");
22     gco.push("destination-over");
23     gco.push("lighter");
24     gco.push("copy");
25     gco.push("xor");
26
27     for (i=0;i<gco.length;i++){
28         document.write("<div id=‘p_" + i + "‘ style=‘float:left;‘>" + gco[i] + ":<br>");
29         var c=document.createElement("canvas");
30         c.width=120;
31         c.height=100;
32         document.getElementById("p_" + i).appendChild(c);
33         var ctx=c.getContext("2d");
34         ctx.fillStyle="blue";
35         ctx.fillRect(10,10,50,50);
36         ctx.globalCompositeOperation=gco[i];
37         ctx.beginPath();
38         ctx.fillStyle="red";
39         ctx.arc(50,50,30,0,2*Math.PI);
40         ctx.fill();
41         document.write("</div>");
42     }
43
44 </script>
45 </body>
46 </html>

结果:

时间: 2024-08-10 05:55:36

canvas图形的组合与裁切的相关文章

转载文章 利用旋转正方形与图形的组合实现爱心

实现爱心效果图 源码 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <title>利用旋转正方形与图形的组合实现爱心</title> 6 <style> 7 html { 8 font-family: "microsoft yahei"; 9 } 10 .heartShaped { 11 position

Android 图形状态组合的应用 (笔记 )

目的:创建按钮,当按钮使按钮有不同的形状状态     在res下drawable-hdpi保存按钮初始状态left.png和按钮按下后的状态图片rigth.png.          将图片文件拖到创建好的文件夹drawable-hdpi中          创建一个一般的XML文件,新建图形状态组合步骤为     drawable_change → New → Other... → XML → XML File           注意:将Left_Rigth.XML 改成 left_righ

Canvas 图形组合方式

/** * 图形组合 */ function initDemo5() { var canvas = document.getElementById("demo5"); if (!canvas) return; var context = canvas.getContext("2d"); var oprtns = [ "source-atop", // 新图形覆盖原有图形,新图形未重叠部分透明 "source-in", // 新

canvas图形组合

代码: 1 /** 2 * Created by Administrator on 2016/1/27. 3 */ 4 function draw (id){ 5 var canvas = document.getElementById(id); 6 var context = canvas.getContext('2d'); 7 context.globalCompositeOperation = "lighter"; 8 RectArc(context); 9 } 10 funct

HTML5 Canvas ( 图形变换矩阵 ) transform, setTransform

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas</title> <script type="text/javascript" src="../js/jQuery.js"></script> <style type="text/css">

canvas图形导航

对于用canvas绘制图形简单的导航方便绘制嘴贱单的图片: <!DOCTYPE html><html><head> <meta charset="utf-8" /> <title>HTML5 移动Web开发指南</title> <style type="text/css"> h1, h5 { text-align: center; } canvas { float: left; ma

WPF 中Canvas图形移动、缩放代码

从Flash转C#,很多内容一知半解,边摸索边前进,代码粗糙,权当留个脚印. 只是想得到一个基础的移动和缩放功能的界面,找了很久都是画线.画矩形等基础形状的代码,移动和缩放说的并不清晰,只能自己努力来解决一下. 素材准备: WPF项目的屏幕上放一个Canvas控件,名称为canvas1. 代码如下: 1 using System; 2 using System.Windows; 3 using System.Windows.Media; 4 using System.Windows.Input;

C# 绘制Word图形、组合图形

一.序言 在Office Word中,支持在Word文档中插入类型非常丰富的形状,包括线条.矩形.基本形状(诸如圆形.多边形.星形.括号.笑脸等等图形).箭头形状.公式形状.流程图.旗帜图形.标注图形等等,我们在编程过程中,想要在Word中绘制不同类型的图形,可以通过类库来操作.控件Spire.Doc for .NET 6.0及以上版本开始支持Office Word中的所有图形,可以通过代码操作某个单一的形状,也可以通过将单一形状进行组合来获得想要的图形或形状效果,当然,也支持自己自定义图形,通

HTML5 Canvas ( 图形的像素操作 ) getImageData, putImageData, ImgData.data

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas</title> <script type="text/javascript" src="../js/jQuery.js"></script> <style type="text/css">