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

简介:

本节书摘来自异步社区《HTML5 Canvas开发详解》一书中的第2章,第2.6节,作者: 【美】Steve Fulton , Jeff Fulton 更多章节内容可以访问云栖社区“异步社区”公众号查看。

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);
}
AI 代码解读


c17f370a91ad66a54e529a716331b11142b9016c

如例2-6所示,这里测试了globalCompositeOperation和globalAlpha Canvas属性。当指定字符串为sourceover时,实际上是将globalCompositeOperation重设回默认值。然后创建了几个红色方形来显示不同的合成选项和组合。注意,destination-atop切换到当前Canvas位图之下的新绘制形状,globalAlpha属性只影响设置之后所画的形状。这意味着不必为绘制新的形状设定新的透明度而使用save()和restore() Canvas对状态进行操作。

在2.7节将讲解一些影响整个画布的变换。因此,如果要变换新绘制的形状,必须使用save()和restore()函数。

目录
打赏
0
0
0
0
1819
分享
相关文章
基于HTML5+Canvas绘制的鼠标跟随三角形碎片光标动画代码
基于HTML5+Canvas绘制的鼠标跟随三角形碎片光标动画特效代码,很有意思,一团三角形碎片跟随鼠标的移动,不冗长、不笨重,反而有一种很轻盈的感觉,非常不错
74 29
Html5 Canvas绘制圆形仪表盘动画源码
Html5 Canvas绘制圆形仪表盘动画特效是一款基于HTML5 Canvas绘制的圆形百分比仪表盘动画特效。
33 1
html5 canvas五彩碎纸屑飘落动画特效
h5 canvas飘落纸片动画是一款实现五彩纸屑飘落的背景动画特效,基于canvas绘制的空中飘落的纸屑片动画特效,适用于网页动态背景效果代码。简单使用,欢迎下载!代码适用浏览器:搜狗、360、FireFox(建议)、Chrome、Safari、Opera、傲游、世界之窗,是一款不错的的特效插件,希望大家喜欢!
77 5
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
53 0
基于canvas实现的彩色纸屑组成文字3d动画HTML源码
HTML5 Canvas制作的粒子十秒倒计时源码
一段基于HTML5 Canvas制作的粒子爆炸,十秒数字倒计时,全屏倒计时动画效果,给人一种非常大气的视觉感
70 0
HTML5 Canvas制作的粒子十秒倒计时源码
Canvas三维变化背景动画HTML源码
Canvas三维变化背景动画HTML源码
58 5
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
用HTML5中的 画布(Canvas)在“圳品”信息系统网页上绘制显示饼图
HTML5 画布上的 Three.js 环境灯光(HTML5 Canvas Three.js Ambient Lighting)
HTML5 画布上的 Three.js 环境灯光(HTML5 Canvas Three.js Ambient Lighting) 太阳火神的美丽人生 (http://blog.csdn.net/opengl_es) 本文遵循“署名-非商业用途-保持一致”创作公用协议 转载请保留此句:太阳火神的美丽人生 -  本博客专注于 敏捷开发及移动和物联设备研究:iOS、Android、Html5、Arduino、pcDuino,否则,出自本博客的文章拒绝转载或再转载,谢谢合作。
1137 0
|
2月前
|
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
69 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
173 21
【01】完成新年倒计时页面-蛇年新年快乐倒计时领取礼物放烟花html代码优雅草科技央千澈写采用html5+div+CSS+JavaScript-优雅草卓伊凡-做一条关于新年的代码分享给你们-为了C站的分拼一下子
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等