Canvas入门(2):图形渐变和图像形变换
来源:http://www.ido321.com/986.html
一、图形渐变(均在最新版Google中测试)
1、绘制线性渐变
1: // 获取canvas 的ID
2: var canvas = document.getElementById('canvas');
3: if (canvas == null)
4: {
5: return false;
6: }
7: // 获取上下文
8: var context = canvas.getContext('2d');
9: // 获取渐变对象
10: var g1 = context.createLinearGradient(0,0,0,300);
11: // 添加渐变颜色
12: g1.addColorStop(0,'rgb(255,255,0)');
13: g1.addColorStop(1,'rgb(0,255,255)');
14: context.fillStyle = g1;
15: context.fillRect(0,0,400,300);
16: var g2 = context.createLinearGradient(0,0,300,0);
17: g2.addColorStop(0,'rgba(0,0,255,0.5)');
18: g2.addColorStop(1,'rgba(255,0,0,0.5)');
19: for(var i = 0; i<10;i++)
20: {
21: context.beginPath();
22: context.fillStyle=g2;
23: context.arc(i*25, i*25, i*10, 0, Math.PI * 2, true);
24: context.closePath();
25: context.fill();
26: }
createLinearGradient(x1,y1,x2,y2):参数分别表示渐变起始位置和结束位置的横纵坐标
addColorStop(offset,color):offset表示设定的颜色离渐变起始位置的偏移量,取值范围是0~1的浮点值。渐变起始偏移量是0,渐变结束偏移量是1.color是渐变的颜色。
效果:
2、绘制径向渐变
1: // 获取canvas 的ID
2: var canvas = document.getElementById('canvas');
3: if (canvas == null)
4: {
5: return false;
6: }
7: // 获取上下文
8: var context = canvas.getContext('2d');
9: // 获取渐变对象
10: var g1 = context.createRadialGradient(400,0,0,400,0,400);
11: // 添加渐变颜色
12: g1.addColorStop(0.1,'rgb(255,255,0)');
13: g1.addColorStop(0.3,'rgb(255,0,255)');
14: g1.addColorStop(1,'rgb(0,255,255)');
15: context.fillStyle = g1;
16: context.fillRect(0,0,400,300);
17: var g2 = context.createRadialGradient(250,250,0,250,250,300);
18: g2.addColorStop(1,'rgba(0,0,255,0.5)');
19: g2.addColorStop(0.7,'rgba(255,255,0,0.5)')
20: g2.addColorStop(0.1,'rgba(255,0,0,0.5)');
21: for(var i = 0; i<10;i++)
22: {
23: context.beginPath();
24: context.fillStyle=g2;
25: context.arc(i*25, i*25, i*10, 0, Math.PI * 2, true);
26: context.closePath();
27: context.fill();
28: }
createRadialGradient(x1,y1,radius1,x2,y2,radius2):x1,y1,radius1分别是渐变开始圆的圆心横纵坐标和半径。x2,y2,radius2分别是渐变结束圆的圆心横纵坐标和半径。
效果
二、图形变换
1、坐标变换:平移、缩放和旋转
1: // 获取canvas 的ID
2: var canvas = document.getElementById('canvas');
3: if (canvas == null)
4: {
5: return false;
6: }
7: // 获取上下文
8: var context = canvas.getContext('2d');
9: context.fillStyle = '#eeeeff';
10: context.fillRect(0,0,400,300);
11: // 平移坐标原点
12: context.translate(200,50);
13: context.fillStyle = 'rgba(255,0,0,0.25)';
14: for(var i = 0; i<50;i++)
15: {
16: context.translate(25,25);
17: // 图形缩放
18: context.scale(0.95,0.95);
19: // 图形旋转
20: context.rotate(Math.PI / 10);
21: context.fillRect(0,0,100,50);
22: }
translate(x,y):平移原点,x,y表示向左和向下移动多少单位,默认单位是像素
scale(x,y):缩放,x,y表示水平和垂直方向的缩放大小。小于1缩小,大于1放大。
rotate(angle):旋转,angle是旋转角度,单位是弧度。大于0表示顺时针旋转,反之逆时针。
效果:
2、矩阵变换
1: // 获取canvas 的ID
2: var canvas = document.getElementById('canvas');
3: if (canvas == null)
4: {
5: return false;
6: }
7: // 获取上下文
8: var context = canvas.getContext('2d');
9: // 定义颜色
10: var colors = ['red','orange','yellow','green','blue','navy','purple'];
11: // 定义线宽
12: context.lineWidth = 10;
13: // 矩阵变换
14: context.transform(1,0,0,1,100,0);
15: // 循环绘制圆弧
16: for (var i = 0; i < colors.length; i++)
17: { //原点每次下移10个px
18: context.transform(1,0,0,1,0,10);
19: context.strokeStyle = colors[i];
20: context.beginPath();
21: context.arc(50,100,100,0,Math.PI,true);
22: context.stroke();
23: }
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入门(2):图形渐变和图像形变换的更多相关文章
- Canvas入门(1):绘制矩形、圆、直线、曲线等基本图形
来源:http://www.ido321.com/968.html 一.Canvas的基础知识 Canvas是HTML 5中新增的元素,专门用于绘制图形.canvas元素就相当于一块“画布”,一块无色 ...
- Html5学习2(Html表格、Html列表、Html5新元素、Canvas (坐标、路径、画圆、文本、渐变、图像))
Html表格 1.表格中的表头:<th></th>.其中表头部分字体加粗,颜色深绿色 <h4>水平标题:</h4> <table border=& ...
- Canvas入门(3):图像处理和绘制文字
来源:http://www.ido321.com/997.html 一.图像处理(非特别说明,所有结果均来自最新版Google) 在HTML 5中,不仅可以使用Canvas API绘制图形,也可以用于 ...
- HTML5 canvas入门
HTML5 Canvas入门 <canvas> 标签定义图形,比如图表和其他图像,您必须使用脚本来绘制图形.在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字. ...
- Canvas入门(3):图像处理和渲染文本
资源:http://www.ido321.com/997.html 一.图像处理(非特别说明,全部结果均来自最新版Google) 在HTML 5中,不仅能够使用Canvas API绘制图形,也能够用于 ...
- canvas学习笔记(中篇) -- canvas入门教程-- 颜色/透明度/渐变色/线宽/线条样式/虚线/文本/阴影/图片/像素处理
[中篇] -- 建议学习时间4小时 课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...
- HTML5使用Canvas来绘制图形
一.Canvas标签: 1.HTML5<canvas>元素用于图形的绘制,通过脚本(通常是javascript)来完成. 2.<canvas>标签只是图形容器,必须使用脚本来绘 ...
- canvas学习笔记(上篇)-- canvas入门教程 -- canvas标签/方块/描边/路径/圆形/曲线
[上篇] -- 建议学习时间4小时 课程共(上中下)三篇 此笔记是我初次接触canvas的时候的学习笔记,这次特意整理为博客供大家入门学习,几乎涵盖了canvas所有的基础知识,并且有众多练习案例, ...
- Canvas学习:封装Canvas绘制基本图形API
Canvas学习:封装Canvas绘制基本图形API Canvas Canvas学习 从前面的文章中我们了解到,通过Canvas中的CanvasRenderingContext2D对象中的属性和方 ...
随机推荐
- python流程控制语句 ifelse - 2
#! /usr/bin/python x = input('please input a integer:') x = int (x) ): print('你输入了一个负数') else: print ...
- Python第一天——初识Python
python是由荷兰人Guido van Rossum 于1989年发明的一种面向对象的的解释型计算机程序设语言,也可以称之为编程语言.例如java.php.c语言等都是编程语言. 那么为什么会有编程 ...
- 转ATL对象类型
http://hi.baidu.com/rural_child/item/d91ce5d8fba9c8e73cc2cbf9 1.Objects a.Simple Object:用于实现业务逻辑,无用户 ...
- onlineDDL测试
onlineDDL语法: alter table ALTER [COLUMN] col_name {SET DEFAULT literal | DROP DEFAULT} ADD [COLUMN] c ...
- Setup Oracle 11gR2 for Redhat Linux AS 4 Update 7 x64
Setup Oracle 11gR2 for Redhat Linux AS 4 Update 7 x64 1. checking linux version. [root@localhost ~]# ...
- linux 压缩/解压命令大全
.tar 解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gun ...
- android动画坐标定义
这段时间一直在忙Android的项目,总算抽出点时间休息一下,准备把一些项目用到的Android经验分享一下. 在Android开发过程中,经常会碰到Activity之间的切换效果的问题,下面介绍一下 ...
- 使用Quartz创建定时任务
项目开发中经常需要定时循环执行某些任务 比如定时发送报表,定时发送邮件,亦或者定时清理缓存,定时更新数据等等 有些时候可以简单地利用Windows Server的计划任务执行程序 Linux也有相应的 ...
- SQL查看数据库所用用户表数量和使用的空间
SQL Server数据库管理员通常硬盘空间奋斗,不断努力清理“表”,撰写许多查询,发现该表使用的硬盘空间. 本文介绍了如何查询系统表的空间使用情况,帮助数据库管理员识别正在使用最多的空间,以便存档旧 ...
- Qt之自定义界面(窗体缩放-跨平台终极版)
简述 通过上一节内容,我们实现了窗体的缩放,功能很不错,但是很遗憾-不支持跨平台!如果对于多平台来说,这是一个硬伤,所以,我们急需要一个能够支持跨平台的实现方案. 在网上看到过很多不同的实现方式,多多 ...