Maison > interface Web > tutoriel HTML > Canvas入门(2):图形渐变和图像形变换_html/css_WEB-ITnose

Canvas入门(2):图形渐变和图像形变换_html/css_WEB-ITnose

WBOY
Libérer: 2016-06-24 11:56:26
original
1030 Les gens l'ont consulté

来源:http://www.ido321.com/986.html

 

一、图形渐变(均在最新版Google中测试)

1、绘制线性渐变

   1: // 获取canvas 的ID
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   2:     var canvas = document.getElementById('canvas');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   3:     if (canvas == null)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   4:     {
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   5:         return false;
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   6:     }
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   7:     // 获取上下文
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   8:     var context = canvas.getContext('2d');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   9:     // 获取渐变对象
Copier après la connexion
Copier après la connexion
  10:     var g1 = context.createLinearGradient(0,0,0,300);
Copier après la connexion
  11:     // 添加渐变颜色
Copier après la connexion
Copier après la connexion
  12:     g1.addColorStop(0,'rgb(255,255,0)');
Copier après la connexion
  13:     g1.addColorStop(1,'rgb(0,255,255)');
Copier après la connexion
  14:     context.fillStyle = g1;
Copier après la connexion
  15:     context.fillRect(0,0,400,300);
Copier après la connexion
  16:     var g2 = context.createLinearGradient(0,0,300,0);
Copier après la connexion
  17:     g2.addColorStop(0,'rgba(0,0,255,0.5)');
Copier après la connexion
  18:     g2.addColorStop(1,'rgba(255,0,0,0.5)');
Copier après la connexion
  19:     for(var i = 0; i<10;i++)
Copier après la connexion
  20:     {
Copier après la connexion
  21:         context.beginPath();
Copier après la connexion
  22:         context.fillStyle=g2;
Copier après la connexion
  23:         context.arc(i*25, i*25, i*10, 0, Math.PI * 2, true);
Copier après la connexion
  24:         context.closePath();
Copier après la connexion
  25:         context.fill();
Copier après la connexion
  26:     }
Copier après la connexion

createLinearGradient(x1,y1,x2,y2):参数分别表示渐变起始位置和结束位置的横纵坐标

addColorStop(offset,color):offset表示设定的颜色离渐变起始位置的偏移量,取值范围是0~1的浮点值。渐变起始偏移量是0,渐变结束偏移量是1.color是渐变的颜色。

效果:

2、绘制径向渐变

   1: // 获取canvas 的ID
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   2:     var canvas = document.getElementById('canvas');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   3:     if (canvas == null)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   4:     {
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   5:         return false;
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   6:     }
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   7:     // 获取上下文
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   8:     var context = canvas.getContext('2d');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   9:     // 获取渐变对象
Copier après la connexion
Copier après la connexion
  10:     var g1 = context.createRadialGradient(400,0,0,400,0,400);
Copier après la connexion
  11:     // 添加渐变颜色
Copier après la connexion
Copier après la connexion
  12:     g1.addColorStop(0.1,'rgb(255,255,0)');
Copier après la connexion
  13:     g1.addColorStop(0.3,'rgb(255,0,255)');
Copier après la connexion
  14:     g1.addColorStop(1,'rgb(0,255,255)');
Copier après la connexion
  15:     context.fillStyle = g1;
Copier après la connexion
  16:     context.fillRect(0,0,400,300);
Copier après la connexion
  17:     var g2 = context.createRadialGradient(250,250,0,250,250,300);
Copier après la connexion
  18:     g2.addColorStop(1,'rgba(0,0,255,0.5)');
Copier après la connexion
  19:     g2.addColorStop(0.7,'rgba(255,255,0,0.5)')
Copier après la connexion
  20:     g2.addColorStop(0.1,'rgba(255,0,0,0.5)');
Copier après la connexion
  21:     for(var i = 0; i<10;i++)
Copier après la connexion
  22:     {
Copier après la connexion
  23:         context.beginPath();
Copier après la connexion
  24:         context.fillStyle=g2;
Copier après la connexion
  25:         context.arc(i*25, i*25, i*10, 0, Math.PI * 2, true);
Copier après la connexion
  26:         context.closePath();
Copier après la connexion
  27:         context.fill();
Copier après la connexion
  28:     }
Copier après la connexion

createRadialGradient(x1,y1,radius1,x2,y2,radius2):x1,y1,radius1分别是渐变开始圆的圆心横纵坐标和半径。x2,y2,radius2分别是渐变结束圆的圆心横纵坐标和半径。

效果

二、图形变换

1、坐标变换:平移、缩放和旋转

   1: // 获取canvas 的ID
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   2:     var canvas = document.getElementById('canvas');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   3:     if (canvas == null)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   4:     {
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   5:         return false;
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   6:     }
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   7:     // 获取上下文
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   8:     var context = canvas.getContext('2d');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   9:     context.fillStyle = '#eeeeff';
Copier après la connexion
  10:     context.fillRect(0,0,400,300);
Copier après la connexion
  11:     // 平移坐标原点
Copier après la connexion
  12:     context.translate(200,50);
Copier après la connexion
  13:     context.fillStyle = 'rgba(255,0,0,0.25)';
Copier après la connexion
  14:     for(var i = 0; i<50;i++)
Copier après la connexion
  15:     {
Copier après la connexion
  16:         context.translate(25,25);
Copier après la connexion
  17:         // 图形缩放
Copier après la connexion
  18:         context.scale(0.95,0.95);
Copier après la connexion
  19:         // 图形旋转
Copier après la connexion
  20:         context.rotate(Math.PI / 10);
Copier après la connexion
  21:         context.fillRect(0,0,100,50);
Copier après la connexion
  22:     }
Copier après la connexion

translate(x,y):平移原点,x,y表示向左和向下移动多少单位,默认单位是像素

scale(x,y):缩放,x,y表示水平和垂直方向的缩放大小。小于1缩小,大于1放大。

rotate(angle):旋转,angle是旋转角度,单位是弧度。大于0表示顺时针旋转,反之逆时针。

效果:

2、矩阵变换

   1: // 获取canvas 的ID
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   2:     var canvas = document.getElementById('canvas');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   3:     if (canvas == null)
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   4:     {
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   5:         return false;
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   6:     }
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   7:     // 获取上下文
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   8:     var context = canvas.getContext('2d');
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion
   9:     // 定义颜色
Copier après la connexion
  10:     var colors = ['red','orange','yellow','green','blue','navy','purple'];
Copier après la connexion
  11:     // 定义线宽
Copier après la connexion
  12:     context.lineWidth = 10;
Copier après la connexion
  13:     // 矩阵变换
Copier après la connexion
  14:     context.transform(1,0,0,1,100,0);
Copier après la connexion
  15:     // 循环绘制圆弧
Copier après la connexion
  16:     for (var i = 0; i < colors.length; i++)
Copier après la connexion

17: { //原点每次下移10个px

  18:          context.transform(1,0,0,1,0,10);
Copier après la connexion
  19:         context.strokeStyle = colors[i];
Copier après la connexion
  20:         context.beginPath();
Copier après la connexion
  21:         context.arc(50,100,100,0,Math.PI,true);
Copier après la connexion
  22:         context.stroke();
Copier après la connexion
  23:     }
Copier après la connexion

transform(m11,m12,m21,m22,dx,dy):改方法使用一个新的变换矩阵与当前变换矩阵进行乘法运算。dx,dy表示原点坐标左移和下移的单位,默认是像素。

该变换矩阵格式如下

m11     m12   dx

m21      m22  dy

0            0         1

最终效果:

总结:坐标变换的方法均可以用transform()代替,规则如下:

1、translate(x,y)    transform(1,0,0,1,dx,dy)或transform(0,1,1,0,dx,dy),前四个参数表示不对图形进行缩放操作。

2、scale(x,y) transform(x,0,0,y,0,0)或transform(0,y,x,0,0,0),后面两个参数表示不进行平移。

3、 rotate(angle) transform(Math.cos(angle*Math.PI/180),Math.sin(angle*Math.PI/180),- Math.sin(angle*Math.PI/180),Math.cos(angle*Math.PI/180),0,0)或

transform(-Math.sin(angle*Math.PI/180),Math.cos(angle*Math.PI/180),Math.cos(angle*Math.PI/180),Math.sin(angle*Math.PI/180),0,0)

 

下一篇:Canvas入门(3):图像处理和绘制文字

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal