canvas教程

关于canvas中用到的函数整理(2)

字号+ 作者:H5之家 来源:H5之家 2018-01-26 18:00 我要评论( )

如果你想要绘制一条从 (3,1) 到 (3,5),宽度是 1.0 的线条,你会得到像第二幅图一样的结果。实际填充区域(深蓝色部分)仅仅延伸至路径两旁各一半像素。而这半个像素又会以近的方式进行渲染,这意味着那些像素只是

如果你想要绘制一条从 (3,1) 到 (3,5),宽度是 1.0 的线条,你会得到像第二幅图一样的结果。实际填充区域(深蓝色部分)仅仅延伸至路径两旁各一半像素。而这半个像素又会以近似的方式进行渲染,这意味着那些像素只是部分着色,结果就是以实际笔触颜色一半色调的颜色来填充整个区域(浅蓝和深蓝的部分)。这就是上例中为何宽度为 1.0 的线并不准确的原因。

要解决这个问题,你必须对路径施以更加精确的控制。已知粗 1.0 的线条会在路径两边各延伸半像素,那么像第三幅图那样绘制从 (3.5,1) 到 (3.5,5) 的线条,其边缘正好落在像素边界,填充出来就是准确的宽为 1.0 的线条。

对于那些宽度为偶数的线条,每一边的像素数都是整数,那么你想要其路径是落在像素点之间 (如那从 (3,1) 到 (3,5)) 而不是在像素点的中间。同样,注意到那个例子的垂直线条,其 Y 坐标刚好落在网格线上,如果不是的话,端点上同样会出现半渲染的像素点。

虽然开始处理可缩放的 2D 图形时会有点小痛苦,但是及早注意到像素网格与路径位置之间的关系,可以确保图形在经过缩放或者其它任何变形后都可以保持看上去蛮好:线宽为 1.0 的垂线在放大 2 倍后,会变成清晰的线宽为 2.0,并且出现在它应该出现的位置上。


lineCap属性

属性lineCap的值决定了线段端点显示的样子。它可以为下面的三种的其中之一:butt,round,square。默认是butt。

lineJoin属性

lineJoin的属性值直接决定了图形中两线段连接处所显示的样子。它可以是这三种之一:round,bevel和miter.默认是miter。

miterLimit 属性的演示例子

As you've seen in the previous example, when joining two lines with themiter option, the outside edges of the two joining lines are extended up to the point where they meet. For lines which are at large angles with each other, this point is not far from the inside connection point. However, when the angles between each line decreases, the distance (miter length) between these points increases exponentially.

就如上一个例子所见的应用 miter 的效果,线段的外侧边缘会延伸交汇于一点上。线段直接夹角比较大的,交点不会太远,但当夹角减少时,交点距离会呈指数级增大。

The miterLimit property determines how far the outside connection point can be placed from the inside connection point. If two lines exceed this value, a bevel join will be drawn.

miterLimit 属性就是用来设定外延交点与连接点的最大距离,如果交点距离大于此值,连接效果会变成了 bevel。

I've made a little demo in which you can set miterLimit dynamically and see how this effects the shapes on the canvas. The blue lines show where the start and endpoints for each of the lines in the zig-zag pattern are.

我做了一个演示页面,你可以动手改变 miterLimit 的值,观察其影响效果。蓝色辅助线显示锯齿折线段的起点与终点所在的位置。

渐变Gradients

我们可以用线性或者径向的渐变来填充或者描边

用下面的方法新建canvasGadient对象,并且赋给图形的fillStyle或strokeStyle属性。

createLinearGradient(x1,y1,x2,y2) 方法接受4个参数,标书渐变的起点(x1,y1)与终点(x2,y2)。

createRadiaGradient(x1,y1,r1,x2,y2,r2)方法接受6个参数,前三个定义一个以(x1,y1)为原点,半径为r1的圆,后三个参数则定义另一个以(x2,y2)为原点,半径为r2的圆。

创建出canvasStop对象后,我们就可以用addColorStop方法给它上色了。

addColorStop(position,color)

addcolorStop方法接受两个参数,position参数必须是一个0.0与1.0之间的数值,表示渐变中颜色所在的相对位置。例如,0.5表示颜色会出现在正中间。color参数必须是一个有效的CSS颜色值(如#FFF,rgba(0,0,0,1)等等)。


图案 Patterns

实现图案的效果,有一个更加简单的方法:createPattern。

createPattern(image,type)

Image可以是一个Image对象的引用,或者另一个canvas对象。Type必须是下面的字符串之一:repeat,repeat-x,repeat-y,no-repeat。

注意:用canvas对象作为Image参数在Firefox 1.5(Gecko 1.8)中是无效的。

图案的应用于渐变类似,创建出一个pattern之后,赋给fillStyle或strokeSty le属性即可。

与drawImage有点不同,你需要确认image对象已经装载完毕,否则图案可能效果不对的。

对于Firefox浏览器,目前只支持属性repeat,如果赋其他值,什么效果都没有的。


阴影Shadows

shadowOffsetX=float

shadowOffsetY=float

shadowBlur=float

shadowColor=color

shadowOffsetX和shadowOffsetY用来设定阴影在X和Y轴的延伸距离,它们是不受变换矩阵所影响的。负值表示阴影会往上或左延伸,正值则表示会往下或右延伸,他们默认都是0。

shadowBlur用于设定阴影的模糊成都,其数值并不跟像素挂钩,也不受变换矩阵的影响,默认为0。

shadowColor是标准的CSS颜色值,用于设定阴影颜色效果,默认是全透明的黑色。


Canvas 填充规则

 

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • [js高手之路] html5 canvas系列教程,html5canvas

    [js高手之路] html5 canvas系列教程,html5canvas

    2018-01-26 14:03

  • 实现远程实时通信 Html5:Canvas+WebSocket

    实现远程实时通信 Html5:Canvas+WebSocket

    2018-01-26 13:46

  • WPF中关于Canvas画线段的问题

    WPF中关于Canvas画线段的问题

    2018-01-24 17:09

  • 鑷畾涔塚iew鍒╁櫒Canvas鍜孭aint璇﹁В

    鑷畾涔塚iew鍒╁櫒Canvas鍜孭aint璇﹁В

    2018-01-24 16:00

网友点评