globalCompositeOperation 学习
globalCompositeOperation
globalCompositeOperation即Canvas中的合成操作。
1、source-over
这是默认值,他表示绘制的图形将画在现有画布之上
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="source-over"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
2、destination-over
这个操作的值与前一个值相反,所以现在目标绘制在源之上
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="destination-over"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
3、source-atop
这个操作会将源绘制在目标之上,但是在重叠区域上两者都是不透明的。绘制在其他位置的目标是不透明的,但源是透明的。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="source-atop"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
4、destination-atop
这个操作与source-atop相反,目标绘制在源之上
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="destination-atop"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
5、source-in
在源于目标重叠的区域只绘制源,而不重叠的部分编程透明的。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="source-in"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
6、destination-in
这个操作与source-in相反,在源于目标重叠的区域保留目标。而不重叠的部分都变成透明的。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="destination-in"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
7、source-out
在与目标不重叠的区域上绘制源,其他部分都变成透明的。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="source-out"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
8、destination-out
在与源不重叠的区域上保留目标。其他部分都变成透明的。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="destination-out"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
9、lighter
这个值与顺序无关,如果源与目标重叠,就将两者的颜色值想加。得到的颜色值的最大取值为255,结果就为白色。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="lighter"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
10、copy
这个值与顺序无关,只绘制源,覆盖掉目标。
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="copy"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
11、xor
这个值与顺序无关,只绘制出不重叠的源与目标区域。所有重叠的部分都变成透明的
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8">
- <title></title>
- <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
- <script type="text/javascript">
- $(document).ready(function(){
- var canvas=document.getElementById("myCanvas");
- var context=canvas.getContext("2d");
- context.fillStyle="rgb(63,169,245)";
- context.fillRect(50,50,100,100);
- context.globalCompositeOperation="xor"
- context.fillStyle="rgb(255,123,172)";
- context.fillRect(100,100,100,100);
- });
- </script>
- </head>
- <body>
- <canvas id="myCanvas" width="1000px" height="1000px"></canvas>
- </body>
- </html>
globalCompositeOperation 学习的更多相关文章
- Canvas学习:globalCompositeOperation详解
在默认情况之下,如果在Canvas之中将某个物体(源)绘制在另一个物体(目标)之上,那么浏览器就会简单地把源特体的图像叠放在目标物体图像上面. 简单点讲,在Canvas中,把图像源和目标图像,通过Ca ...
- 简单入门canvas - 通过刮奖效果来学习
一 .前言 一直在做PC端的前端开发,从互联网到行业软件.最近发现移动端已经成为前端必备技能了,真是不能停止学习.HTML5新增的一些东西,canvas是用的比较多也比较复杂的一个,简单的入门了一下, ...
- 学习HTML5, Canvas及简单动画的使用
通过在CSDN中的一些简单课程学习,跟随老师联系,做了如下的月亮,太阳和地球的运动效果.纪录在文章中,用于下次使用. 准备工作如下: 1. 使用三张背景图片 太阳 月亮 地球 2. 在HTML页面中定 ...
- (私人收藏)[开发必备]HTML5最全快速查找离线手册(可查询可学习,带实例)
[开发必备]HTML5最全快速查找离线手册(可查询可学习,带实例) HTML5最全快速查找离线手册:https://pan.baidu.com/s/19seE8TJQSx4IsWgXtKQS0Aj9y ...
- 从直播编程到直播教育:LiveEdu.tv开启多元化的在线学习直播时代
2015年9月,一个叫Livecoding.tv的网站在互联网上引起了编程界的注意.缘于Pingwest品玩的一位编辑在上网时无意中发现了这个网站,并写了一篇文章<一个比直播睡觉更奇怪的网站:直 ...
- Angular2学习笔记(1)
Angular2学习笔记(1) 1. 写在前面 之前基于Electron写过一个Markdown编辑器.就其功能而言,主要功能已经实现,一些小的不影响使用的功能由于时间关系还没有完成:但就代码而言,之 ...
- ABP入门系列(1)——学习Abp框架之实操演练
作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...
- 消息队列——RabbitMQ学习笔记
消息队列--RabbitMQ学习笔记 1. 写在前面 昨天简单学习了一个消息队列项目--RabbitMQ,今天趁热打铁,将学到的东西记录下来. 学习的资料主要是官网给出的6个基本的消息发送/接收模型, ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
随机推荐
- javascript数据类型、初始化
Javascript数据类型有6种: 数值型数据类型(Number): 字符串(String): 布尔型数据(Boolean): 对象数据(Object): 空(Null): 未定义(Undefine ...
- Oracle password expire notices
/usr/local/webserver/tomcat6/logs/logbak/zsxxw.log.2015-03-21.txt:2015-03-22 00:47:26,366 ORA-28002: ...
- ExecuteReader(),ExecuteNonQuery(),ExecuteScalar(),ExecuteXmlReader()之间的区别
本文来自:http://www.cnblogs.com/zhouxiaxue/archive/2006/05/12/398266.html http://www.cnblogs.com/yaoxc/a ...
- C#基础:事件(二) 【转】
上篇文章介绍了C#中事件的基本实现方式,在本文中,将对最常见的事件委托EventHandler和EventHandler<T>做介绍. 事实上,在前面文章的介绍中,已经涉及到了EventH ...
- 关于smali插桩
虽说是老生常谈的东西了,稍微记录一下. 我觉得最重要的就是寄存器的问题了,如果需要额外的寄存器,要在smali函数的最前面将寄存器数量增加到需要的数量. 在smali代码中,寄存器有两种表示方式,一种 ...
- ORACLE 主要后台进程1
Oracle Database Background Processes: 1.Database writer (DBWn)The database writer writes modified bl ...
- java中的302和sendRedirect的区别
java中有一个sendRedirect函数这个用于跳转到另外一个页面,这个实际上是一个302跳转,但是不完全等同于302跳转 点击(此处)折叠或打开 response.sendRedirect(&q ...
- zoj1027 Human Gene Functions
一道动态规划,两个串进行匹配,不同字母匹配的值不一样,也可以和空格匹配(空格不能与空格匹配),求最大的匹配值. 数据很弱,每个串都在100以内. 定义dp[i][j]为第一个串前i个数和第二个串前j个 ...
- Kurskal算法(克鲁斯卡尔算法)
特点:适用于稀疏图,边比较少的图.如果顶点较少,且为稠密图,则用Prim算法.跟Prim算法的用途相同.时间复杂度为O(e*loge),其中e为边数. 代码: #include <stdio.h ...
- Android Studio中如何创建AIDL
实现客户端添加Book,Service接收并打印出书籍信息 一.创建Book类 1.创建文件夹(本文命名为aidl) 2.创建Book类并继承Parcelable接口(原因:AIDL只能传送继承Par ...