【canvas学习笔记七】混合和裁剪
globalCompositeOperation
如果我们先画了一个图形,然后要在这个图形上面再画一个图形,那么这个图形会怎么样呢?是覆盖在原来的图形上面吗?这时候,就要用到globalCompositeOperation这个属性了。
当有两个图形重叠的时候,可以有很多种混合模式,比如上面的图形盖住下面的,或者下面的图形盖住上面的,或者去掉重叠的部分。globalCompositeOperation这个属性就是用来设置混合方式的。这个属性总共有12种值。
因为太多了,我就不一一列举了,大家自己去查。戳这里
我这里就简单介绍其中几种。
source-over
默认值。新的形状会覆盖在原来的形状上。
destination-over
和上面一个属性反过来。
copy
只显示新形状。
这个属性和PhotoShop图层里的混合模式是一样的,也有正片叠底、亮化、差值等等模式。
裁剪
如果你只想在一个圆形区域画图,而圆形区域外的图形都看不见的话,你可以使用clip()裁剪画布。

实际上canvas本身就带有一个canvas一样大的裁剪区域,所以实际上并没有添加裁剪路径,只是裁剪路径被修改了。
使用clip()无需用closePath()闭合路径,clip()本身就会闭合路径。
需要注意的是,当clip()了一个路径以后,无法改变clip()的路径形状,要恢复的话只能用restore()回到原先的状态。
例子
function draw() {
var ctx = document.getElementById('canvas').getContext('2d');
ctx.fillRect(0, 0, 150, 150);
ctx.translate(75, 75);
// Create a circular clipping path
ctx.beginPath();
ctx.arc(0, 0, 60, 0, Math.PI * 2, true);
ctx.clip();
// draw background
var lingrad = ctx.createLinearGradient(0, -75, 0, 75);
lingrad.addColorStop(0, '#232256');
lingrad.addColorStop(1, '#143778');
ctx.fillStyle = lingrad;
ctx.fillRect(-75, -75, 150, 150);
// draw stars
for (var j = 1; j < 50; j++) {
ctx.save();
ctx.fillStyle = '#fff';
ctx.translate(75 - Math.floor(Math.random() * 150),
75 - Math.floor(Math.random() * 150));
drawStar(ctx, Math.floor(Math.random() * 4) + 2);
ctx.restore();
}
}
function drawStar(ctx, r) {
ctx.save();
ctx.beginPath();
ctx.moveTo(r, 0);
for (var i = 0; i < 9; i++) {
ctx.rotate(Math.PI / 5);
if (i % 2 === 0) {
ctx.lineTo((r / 0.525731) * 0.200811, 0);
} else {
ctx.lineTo(r, 0);
}
}
ctx.closePath();
ctx.fill();
ctx.restore();
}
结果

【canvas学习笔记七】混合和裁剪的更多相关文章
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- Learning ROS for Robotics Programming Second Edition学习笔记(七) indigo PCL xtion pro live
中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...
- Typescript 学习笔记七:泛型
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python3.4学习笔记(七) 学习网站博客推荐
python3.4学习笔记(七) 学习网站博客推荐 深入 Python 3http://sebug.net/paper/books/dive-into-python3/<深入 Python 3& ...
- canvas学习笔记、小函数整理
http://bbs.csdn.net/topics/391493648 canvas实例分享 2016-3-16 http://bbs.csdn.net/topics/390582151 html5 ...
- Go语言学习笔记七: 函数
Go语言学习笔记七: 函数 Go语言有函数还有方法,神奇不.这有点像python了. 函数定义 func function_name( [parameter list] ) [return_types ...
- iOS 学习笔记七 【博爱手把手教你使用2016年gitHub Mac客户端】
iOS 学习笔记七 [博爱手把手教你使用gitHub客户端] 第一步:首先下载git客户端 链接:https://desktop.github.com 第二步:fork 大神的代码[这里以我的代码为例 ...
- 【opencv学习笔记七】访问图像中的像素与图像亮度对比度调整
今天我们来看一下如何访问图像的像素,以及如何改变图像的亮度与对比度. 在之前我们先来看一下图像矩阵数据的排列方式.我们以一个简单的矩阵来说明: 对单通道图像排列如下: 对于双通道图像排列如下: 那么对 ...
- Linux学习笔记(七) 查询系统
1.查看命令 (1)man 可以使用 man 命令名称 命令查看某个命令的详细用法,其显示的内容如下: NAME:命令名称 SYNOPSIS:语法 DESCRIPTION:说明 OPTIONS:选项 ...
随机推荐
- 【6.24校内test】T2 不老梦
[题目背景] 于万人中万幸得以相逢,刹那间澈净明通. 成为我所向披靡的勇气和惶恐,裂山海,堕苍穹. 爱若执炬迎风,炽烈而哀恸,诸般滋味皆在其中. 韶华宛转吟诵,苍凉的光荣,急景凋年深情难共. ——银临 ...
- python-event事件-模仿红绿灯
import time import threading event =threading.Event() def lighter(): count=0 event.set()#先设置成绿灯 whil ...
- fullpage实现(-)
在线demo还没弄好,地址先给出来
- 4种vue当中的指令和它的用法
1.v-if:判断是否隐藏 2.v-for:数据循环 3.v-bind:class:绑定一个属性 4.v-model:实现数据双向绑定 这里重点说明一个v-if和v-show的区别: 共同点:都是通过 ...
- 利用ios safari浏览器生成桌面快捷方式并唤醒app的示例代码
html 内容: //通过a链接唤醒app <a href="app约定好的scheme" id="qbt" style="display:n ...
- 使用html2canvas实现屏幕截图
相关文件(vue3.0) <script src="https://cdn.jsdelivr.net/bluebird/latest/bluebird.js">< ...
- WebService简单使用教程
根据说明书获取信息 代码示例: import com.gyf.weather.ws.ArrayOfString; import com.gyf.weather.ws.WeatherWS; import ...
- 关于ftp无法链接的情况
首先查看ftp是否安装 systemctl status vsftpd 如果没有先安装 yum install vsftpd 然后启动 systemctl start vsftpd 如果有报错 Job ...
- 提取数据xpath,re,css
XPATH (1)/ 逐层提取 (2)text() 提取标签下面的文本 (3)//标签名 提取所有的标签 (4)//标签名[num>=1] 提取相同标签名的兄弟节点. <tr class= ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(6)|变量绑定]
[易学易懂系列|rustlang语言|零基础|快速入门|(6)] 有意思的基础知识 变量绑定 我们现在回过头来看看,一些基础知识. 因为理解了前面的重要概念:所有权,借用,生命周期. 我们现在看基础知 ...