0
点赞
收藏
分享

微信扫一扫

Canvas入门02

_LEON_ 2022-04-18 阅读 64

渐变

一般用线性或径向渐变来填充或者描边

新建canvasGradient对象,赋给fillStyle或strokeStyle
①createLinearGradient(x1,y1,x2,y2)

渐变的起点(x1,y1),渐变的终点(x2,y2)

②createRadialGradient(x1,y1,r1,x2,y2,r2)

前三个以(x1,y1)为原点,半径为r1的圆,后三个以(x2,y2)为原点,半径为r2的圆

创建canvasGradient对象

用addColorStop方法上色

gradient.addColorStop(position,color)

position是一个0.0-1.0之间的数值,表示渐变中颜色所在的相对位置。如:0.5表示颜色在正中间

color:必须是一个有效的css颜色值(#fff,rgba(0,0,0,1))等

可以根据需要加多个色标

     var canva=document.getElementById('canva')
     var ctx=canva.getContext('2d')
     var lineargradient=ctx.createLinearGradient(0,0,150,150)
     lineargradient.addColorStop(0.1,'red')
     lineargradient.addColorStop(0.6,'blue')
     ctx.fillStyle=lineargradient
     ctx.fillRect(10,10,130,130)

 注意的是:①将渐变方法要赋给ctx的fillStyle或者stokeStyle  

                   ②ctx要有自己的形状/路径等

                   ③可以加多个色标

图案样式 Pattern

方法:createPattern (image,type)

Type :repeatrepeat-xrepeat-y 和 no-repeat

和渐变一样的方法,赋给fillStyle或strokeStyle

为了数据加载的完整性,图片要用一个onload来确保设置图案之前图像已经装载完毕

img.onload = function() {

    // 创建图案
    var ptrn = ctx.createPattern(img, 'repeat');
    ctx.fillStyle = ptrn;
    ctx.fillRect(0, 0, 150, 150);

  }

阴影Shadow

①shadowOffsetX/Y=float

设定阴影在X轴/Y轴的延伸距离,不受变换矩阵影响,负值表示阴影会往上或左延伸,正值往下或右延伸,默认为0

②shadowBlur=float

阴影的模糊程度,不和像素数量和矩阵的影响,默认0

③shadowColor=color

标准的CSS颜色,默认全透明的黑色

填充规则

用到fill(或者clip和isPointPath),选择nonzero(默认)或evenodd

规则根据某处在路径的外面或者里面来决定该处是否被填充,这对于自己与自己路径相交或者路径被嵌套的时候是有用的。

绘制文本

①fillText(text,x,y[,maxWidth])

在(x,y)位置填充指定的文本,宽度可选

②strokeText(text,x,y[,maxWidth])

在(x,y)位置绘制文本边框,宽度可选

文本样式:

font=value 文本样式 ‘10px sans-serif’  和css相似

textAlign=value  对齐方式: start(默认),end,left,right,center

textBaseLine=value 基线对齐方式

top,hanging,middle,alphabetic(默认),ideographic,bottom

direction=value 文本方向 ltr,rtl,inherit(默认)

文本宽度可以用 measureText()方法,返回一个 TextMetrics对象

使用图片

步骤:获得一个指向HTMLImageElement的对象或另一个canvas元素的引用作为源,也可以通过提供一个URL的方式使用图片,使用drawImage()函数绘制到画布上

如何获得需要绘制的图片?

下面的类型任意一种都可以

HTMLImageElment   HTMLVideoElement   HTMLCanvasElement   ImageBitmap

使用相同页面内的图片

document.images集合  document.getElementsByTagName()方法  

其他域名下的图片

在HTMLImageElement上使用crossOrigin属性,要那个服务器允许跨域访问,否则将会污染canvas

创建图像

用脚本新创建一个 HTMLImageElement对象,用load事件保证加载完毕后使用

var img=new Image()
img.onload=function(){}
img.src='xxx.png'

或用data:url

img.src='data:image/gif;base64,xxxxxxxxxxxxxx'

优点:图片内容即时可用,无需去服务器,将css,html,js封装在一起

缺:图像无法缓存,图片大的话url数据相当长

绘制图片: drawImage(image,x,y)

样式:

缩放 Scaling

drawImage(image,x,y,Width,Height) 后面两个参数控制画入的图片缩放的大小

切片 Slicing

drawImage(image,sx,sy,sWidth,sHeight,dx,dy,dWidth,dHeight)

除了第一个,前面4个是定义图像源的切片位置和大小,后四个定义目标的显示位置和大小

举报

相关推荐

0 条评论