《HTML5 canvas开发详解(第2版)》——2.6 在画布上合成

2.6 在画布上合成

合成是指如何精细控制画布上对象的透明度和分层效果。有两个属性可以控制Canvas合成操作:globalAlpha和globalCompositeOperation。

  • globalAlpha:globalAlpha Canvas属性的默认值为1.0(完全不透明),并且可以设置从0.0(完全透明)~1.0的值。这项Canvas属性必须在图形绘制之前设置。
  • globalCompositeOperation:globalCompositeOperation的值在globalalpha以及所有变换都生效后控制在当前canvas位图中绘制图形。
    在下面的列表中,“源图形”是指要绘制在画布上的形状,“目标图形”是指显示在画布上的位图。
  • Copy:二者重叠,显示源图形而不显示目标图形。
  • destination-atop:目标图形位于源图形上,二者重叠且都不透明的地方显示目标图形,源图形不透明而目标图形透明的地方显示源图形,其余显示透明。
  • destination-in:目标图形在源图形内,二者都不透明的地方显示目标图形,其余显示透明。
  • destination-out:目标图形在源图形外,目标图形不透明而源图形透明的地方显示目标图形,其余显示透明。
  • destination-over:目标图形覆盖源图形,目标图形不透明的地方显示目标图形,其余显示源图形。
  • lighter:源图形加目标图形,显示源图形和目标图形之和,色值趋近于1.0。
  • source-atop:源图形在目标图形之上,二者重叠且都不透明的地方显示源图形,目标图形不透明而源图形透明的地方显示目标图形,其余显示透明。
  • source-in:源图形在目标图形内,二者都不透明的地方显示源图形,其余显示透明。
  • source-out:源图形在目标图形外,源图形不透明而目标图形透明的地方显示源图形,其余显示透明。
  • source-over:(默认)源图形覆盖目标图形,源图形不透明的地方显示源图形,其余显示目标图形。
  • xor:源图形xor目标图形,即异或源图形和目标图形。

例2-6显示了这些值如何影响形状绘制,结果如图2-11所示。

例2-6 Canvas合成示例

function drawScreen(){

   //在屏幕上绘制一个大方块
   context.fillStyle = "black"; //
   context.fillRect(10, 10, 200, 200);

   //保留 globalCompositeOperation 原有值不变
   //现在绘制一个红色正方形
   context.fillStyle = "red";
   context.fillRect(1, 1, 50, 50);

   //现在设置为source-over
   context.globalCompositeOperation = "source-over";
   //在旁边再画一个红色正方形
   context.fillRect(60, 1, 50, 50);

   //现在设置为destination-atop
   context.globalCompositeOperation = "destination-atop";
   context.fillRect(1, 60, 50, 50);

   //现在设置globalAlpha
   context.globalAlpha = .5;

   //现在设置为source-atop
   context.globalCompositeOperation = "source-atop";
   context.fillRect(60, 60, 50, 50);
}

https://yqfile.alicdn.com/42e1707ce9688197e950acb98a7f81910cf20683.png" >

提示
不幸地是,context.globalCompositeOperation = "destinationatop"在浏览器上不能再正常使用了。
如例2-6所示,这里测试了globalCompositeOperation和globalAlpha Canvas属性。当指定字符串为sourceover时,实际上是将globalCompositeOperation重设回默认值。然后创建了几个红色方形来显示不同的合成选项和组合。注意,destination-atop切换到当前Canvas位图之下的新绘制形状,globalAlpha属性只影响设置之后所画的形状。这意味着,不必为绘制新的形状设定新的透明度而使用save()和restore() Canvas对状态进行操作。
本书将在2.7节讲解一些影响整个画布的变换。因此,如果要变换新绘制的形状,必须使用save()和restore()函数。

时间: 2024-10-21 11:39:46

《HTML5 canvas开发详解(第2版)》——2.6 在画布上合成的相关文章

《HTML5 canvas开发详解(第2版)》——导读

前言第2版介绍自从本书第1版发行之后,在过去的两年里,HTML5 Canvas的使用有了突飞猛进的增长.本书的第1版可以称得上是第一批介绍Canvas的专著之一.在我们为自己的快速而感到自豪同时也意味着我们曾经独自进行了大量的研究和探索.早在2011年,只有极少数HTML5 Canvas应用的例子和教程.但在2013年情形发生了改变.现在有许多关于HTML5 Canvas的资源可供选择,从框架到API,有许多网站和书籍进行专门的阐述.为了编写第2版,我们进行了大量艰辛的工作来检查在第1版中哪些部

《HTML5 Canvas开发详解》——导读

https://yqfile.alicdn.com/bc81e95aba389209ecb7176965c56b0ba2d9c780.png" > 前言HTML5 Canvas为开发者提供了一个新的机会,利用它仅使用普通的HTML和JavaScript语言就可以在常见的浏览器中创建动画图形.Canvas是HTML5中使用率最高的一部分,它被用于许多演示与游戏.它提供了视觉效果很棒的交互特性,而且它还提供了非常大的自由度,几乎允许开发者在浏览器窗口中做任何事情.然而它与JavaScript的

《HTML5 Canvas开发详解》——2.6 在画布上合成

2.6 在画布上合成 合成是指如何精细控制画布上对象的透明度和分层效果.有两个属性可以控制Canvas合成操作:globalAlpha和globalCompositeOperation. globalAlpha.globalAlpha Canvas属性的默认值为1.0(完全不透明),并且可以设置从0.0(完全透明)到1.0的值.这项Canvas属性必须在图形绘制之前设置. globalCompositeOperation.globalCompositeOperation的值在globalalph

《HTML5 canvas开发详解(第2版)》——第1章 HTML5 Canvas简介1.1 什么是HTML5

第1章 HTML5 Canvas简介 HTML5是新一代的HTML,即超文本标记语言.HTML从1993年第一次标准化后,便奠定了万维网的基础.HTML通过使用将标签用尖括号(< >)括起来的方式定义Web页面内容. HTML5 Canvas是屏幕上的一个由JavaScript控制的即时模式位图区域.即时模式是指在画布上呈现像素的方式,HTML Canvas通过JavaScript调用Canvas API,在每一帧中完全重绘屏幕上的位图.作为一名程序员,所要做的就是在每一帧渲染之前设置屏幕的显

《HTML5 Canvas开发详解》——1.3 文档对象模型(DOM)和Canvas

1.3 文档对象模型(DOM)和Canvas 文档对象模型代表了在HTML页面上的所有对象.它是语言中立且平台中立的.它允许页面的内容和样式被Web浏览器渲染之后再次更新.可以通过JavaScript访问DOM,从20世纪90年代末以来它已经成为JavaScript.DHTML和CSS开发最重要的一部分. 画布元素本身可以通过DOM,在Web浏览器中经由Canvas 2D上下文访问,但是在Canvas中创建的单个图形元素是不能通过DOM访问的.正如本章前面讲到的,这是因为画布工作在即时模式,它并

《HTML5 Canvas开发详解》——第1章 HTML5 Canvas简介1.1 基础的HTML页面

第1章 HTML5 Canvas简介 HTML5是新一代的HTML,即超文本标记语言.HTML从1993年第一次标准化后,便奠定了万维网的基础.HTML通过使用将标签用尖括号(< >)括起来的方式定义Web页面内容. HTML5 Canvas是屏幕上的一个由JavaScript控制的即时模式位图区域.即时模式是指在画布上呈现像素的方式,HTML Canvas通过JavaScript调用Canvas API,在每一帧完全重绘屏幕上的位图.作为一个程序员,所要做的就是在每一帧渲染之前设置屏幕显示,

《HTML5 canvas开发详解(第2版)》——1.11 动画版本的Hello World

1.11 动画版本的Hello World "Hello World"和"猜字母"本身都是不错的示例,但是它们都没能回答出"为什么"--究竟为什么要使用HTML5 Canvas?自创立以来,静态的图像和文字就是HTML的领域,那么画布的不同之处在哪里呢?要回答这个问题,需要创建第二个"Hello World"示例.这个示例将介绍画布与HTML上的其他显示方式的最大不同之处:动画.在这个示例中,将为"Hello Wor

《HTML5 canvas开发详解(第2版)》——1.6 HTML5 Canvas版“Hello World!”

1.6 HTML5 Canvas版"Hello World!" 如前所述,将Canvas放入HTML5页面时第一件要做的事就是,看看整个页面是否已经加载,并且开始操作前是否所有HTML元素都已展现.在用Canvas处理图像和声音的时候,这点会非常重要. 为此,这里要使用JavaScript的事件.当定义的事件发生时,事件从对象发出.其他对象监听事件,这样就可以基于事件进行处理.用JavaScript可以监听对象的一些常见事件,包括键盘输入.鼠标移动以及加载结束. 第一个需要监听的事件是

《HTML5 canvas开发详解(第2版)》——2.8 用颜色和渐变填充对象

2.8 用颜色和渐变填充对象 本章已经在讨论创建基本和复杂形状时,粗略地介绍了颜色和填充样式.本节将深入探讨形状的着色和填充.除了这些简单的着色和填充外,还有很多可用的不同渐变样式.另外,Canvas还可以使用位图来填充形状(参见第4章). 2.8.1 基本填充颜色设置 Canvas fillStyle属性用来设置画布上形状的基本颜色和填充.fillStyle使用简单的颜色名称.这看起来非常简单,例如: context.fillStyle = "red"; 下面是出自HTML4规范的可