用Canvas制作剪纸效果

在做剪纸效果之前,先介绍剪纸效果运用到的一些知识:

1.阴影:

在Canvas之中进行绘制时,可以通过修改绘图环境中的如下4个属性值来指定阴影效果:

  • shadowColor:CSS格式的颜色字串。默认值为rgba(0,0,0,0),即完全透明的黑色。
  • shadowOffsetX:阴影在X轴方向的偏移量,以像素为单位。默认值为0
  • shadowOffsetY:阴影在Y轴方向的偏移量,以像素为单位。默认值为0
  • shadowBlur:表示阴影效果如何延伸的double值。默认值为0.该值用于高斯模糊方程中,以便对阴影进行模糊化处理。

如果满足一下条件,那么使用Canvas的绘图环境对象就可以绘制出阴影效果了:

  1. 指定的shadowColor值不是全透明的。
  2. 在其余的阴影属性中,存在一个非0的值

不过,通常来说,使用半透明色来绘制阴影是个不错的选择,因为这样一来,背景就可以透过阴影显示出来了。

如果要禁用阴影效果,那就将shadowColor的属性设置为underfined。

如果为shadowOffsetX与shadowOffsetY属性设置了非0的正数值,无论绘制什么内容,它看起来都像是浮在了canvas之上,而且这些属性的值越大,我们就会觉得它在canvas上面浮动的越高。而负偏移量可以用来制作内嵌阴影效果。

2.非零环绕原则

在介绍非零环绕准则之前,先介绍一下CanvasRenderingContext2D之中与路径有关的arc()方法。arc()方法在当前路径中增加一段表示圆弧或圆形的子路径,可以通过一个boolean参数来控制该段子路径的方向。如果此参数是true,那么arc()所创建的子路径就是顺时针的,否则就是逆时针的。

如果当前路径是循环的,或者包含多个交叉的子路径,那么Canvas的绘图变量就必须要判断。  

非零环绕原则指的是对于路径中的任意给定区域,从该区域内部画一条足够长的线段,使此线段的终点完全落在路径范围之外。如图所示,那三个箭头所描述的就是这个步骤。接下来,将计数器初始化为0,然后,每当这条线段与路径上的直线或曲线相交时,就改变计数器的值。如果是与路径的顺时针部分相交,则加1,如果是与路径的逆时针部分相交,则减1。若计数器的最终值不是0,那么此区域就在路径里面,在调用fill()方法时,浏览器就会对其进行填充。如果最终值是0,那么此区域就不在路径内部,浏览器也就不会对其进行填充了。

下面介绍剪纸效果:

如图所示为剪纸效果的图。

剪纸效果由两个圆形组成,其中一个圆形在另一个圆形的内部。通过设定arc()方法的最后一个参数,该程序以顺时针方向绘制了内部的圆形,并且以逆时针方向绘制了外围的圆形。浏览器运用“非零环绕规则”,对外围圆形的内部进行了填充,不过填充的范围并不包括里面的圆,这就产生了一种剪纸图案的效果。

代码如下:

 1 var canvas = document.getElementById("canvas"),
 2     context = canvas.getContext(‘2d‘);
 3 //Function-------------------------------------------------
 4 function drawTwoArcs(){
 5     context.beginPath();
 6     context.arc(300,190,150,0,Math.PI*2,false);
 7     context.arc(300,190,100,0,Math.PI*2,true);
 8
 9     context.fill();
10     context.shadowColor = undefined;
11     context.shadowOffsetX = 0;
12     context.shadowOffsetY = 0;
13     context.stroke();
14 }
15 function draw(){
16     context.clearRect(0,0,canvas.width,canvas.height);
17     context.save();
18
19     context.shadowColor = ‘rgba(0,0,0,0.8)‘;
20     context.shadowOffsetX = 12;
21     context.shadowOffsetY = 12;
22     context.shadowBlur = 15;
23
24     drawTwoArcs();
25     context.restore();
26 }
27
28 //Initialzation---------------------------------------------------------------
29 context.fillStyle = ‘rgba(100,140,230,0.5)‘;
30 context.strokeStyle = context.fillStyle;
31 draw();

时间: 2024-12-24 18:15:22

用Canvas制作剪纸效果的相关文章

canvas制作雪花效果

<!DOCTYPE html><html> <head>    <meta http-equiv="Content-type" content="text/html; charset=utf-8" />    <title>圣诞主题</title>    <link rel='stylesheet' href='common.css' />    <link rel="

canvas 制作时钟效果

<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABuQAAAM7CAYAAACyYvapAAAgAElEQVR4AezdCXhcV3338b8s2ZIty/IiO3a8xY4dExIHQslKQmIoCZAQSGhfytuylEBbCoUWKCnQt4hSlgClLVASCoSdAkkckhDIQnBC9jgbcRbifbdsy7KtzZYsS+9zZMY+Gt2Ze+fOOf+5c+93niePztw55/8753POyEI

如何使用 HTML5 Canvas 制作水波纹效果

原文:如何使用 HTML5 Canvas 制作水波纹效果 今天,我们继续分享 JavaScript 实现的效果例子,这篇文章会介绍使用 JavaScript 实现水波纹效果.水波效果以图片为背景,点击图片任意位置都会触发.有时候,我们使用普通的 Javascript 就可以创建一个很有趣的解决功能. 在线演示      源码下载 Step 1. HTML 和以前一样,首先是 HTML 代码: <!DOCTYPE html> <html> <head> <meta

酷!使用 jQuery &amp; Canvas 制作相机快门效果

在今天的教程中,我们将使用 HTML5 的 Canvas 元素来创建一个简单的摄影作品集,它显示了一组精选照片与相机快门的效果.此功能会以一个简单的 jQuery 插件形式使用,你可以很容易地整合到任何网站. 效果演示     插件下载 您可能感兴趣的相关文章 Web 开发中很实用的10个效果[源码下载] 精心挑选的优秀jQuery Ajax分页插件和教程 12个让人惊叹的的创意的 404 错误页面设计 让网站动起来!12款优秀的 jQuery 动画插件 十分惊艳的8个 HTML5 & Java

用Canvas制作可以根据手势摆动的树

用Canvas制作可以根据手势摆动的树 根据工作的需要,制作一个摆动的树做为页面的背景.为了增加页面的交互性,我又为背景中的树增加了鼠标(触控)事件,使他能够根据鼠标(触控)做出相应的动作,当手指做上下或者左右滑动的时候树会跟着摆动.先看看最终效果. Step1.完成HTML页面,新建一个Tree类 完成HTML页面后新建一个Tree类用来记录树的各个属性.其中x,y为树根部的坐标值,branchLen,branchWidth分别是树枝的长度与宽度,depth为树枝的层数,canvas用来接页面

用Canvas制作简单的画图工具

今天用Canvas制作了一个画图工具,非常简单,功能也不是很多,主要有背景网格,画线,画圆,画矩形和画圆角矩形,也用到了canvas的一些基本知识,在这里一一列举. 1.线段的绘制: 如何绘制真正的1像素的线段? 如果在像素边界处绘制一条1像素宽的垂直线段,那么canvas的绘图环境对象会试着将半个像素画在边界中线的右边,将另外半个像素画在边界中线的左边.然而,在一个整像素的范围内绘制半个像素宽的线段是不可能的,,所以左右两个方向上的半像素都被扩展为1像素.如图所示 本来我们想要将线段绘制在深灰

Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏

Vue+WebSocket+ES6+Canvas 制作「你画我猜」小游戏 转载 来源:jrainlau 链接:https://segmentfault.com/a/1190000005804860 项目地址:https://github.com/jrainlau/draw-something 下载 & 运行 git clone [email protected]:jrainlau/draw-something.git cd draw-something && npm install

canvas制作简单钟表

之前用html+css+JavaScript实现了一个简单钟表,但还是有一些问题,主要是一些css属性不同浏览器支持效果不一样,所以尝试用 canvas实现了一个简单的钟表,效果在下方,当然了,采用canvas同样会有一些浏览器不支持... 这里只讨论canvas的实现方式.^_^ html部分 html部分很简单,写入canvas标签,其id设置为“canvas”,用css设置成居中显示,代码如下: 1 <!doctype html> 2 <html> 3 <head>

Html5用Canvas制作绘图板

需求: 绘制多边形 可填充颜色 可设置文字 可移动,可删除 鼠标按住后,抬起之前线段应该跟随鼠标当前位置 可与后台方便的进行数据交互,保存到后台,或将数据从后台取到前台显示相应的图形 思考: 第一想到的是找现成的改一改,找来找去,就觉得fabricjs还可以,不过研究了一下,发现例子太少,很难短时间内上手 想到了最近一直想研究确没时间看的Html5,正巧之前也买了一本关于Canvas游戏开发的书,想试试看,没想到很快就上手了 结果: 一天半时间完成,效果如下: 注意: 不要使用style或者cs