1、应用不同的线型

ctx.lineWidth = value; 线条的宽度,默认为1

ctx.lineCap = type; 设置端点样式, type默认为butt,可选值round,square,butt

ctx.lineJoin = type; 设置连接处样式,type默认为miter,可选值round,bevel,miter

ctx.miterLimit = value; 设置绘制交点的方式,miterLimit属性的作用是斜面的长度设置一个上线,默认为10,当斜面的长度达到线条宽度的10倍时,就会变为斜角,如果lineJoin属性值为round或bevel时,miterLimit属性无效。

a、ctx.lineCap

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d'); var lineCap = ['butt','round','square'];
//绘制参考线
ctx.strokeStyle = 'red';
ctx.beginPath();
ctx.moveTo(10,10);
ctx.lineTo(10,150);
ctx.moveTo(150,10);
ctx.lineTo(150,150);
ctx.stroke();
//绘制直线段
ctx.strokeStyle = 'blue';
for( var i=0; i<lineCap.length; i++){
ctx.lineWidth = 20;
ctx.lineCap = lineCap[i];
ctx.beginPath();
ctx.moveTo(10,30+i*50);
ctx.lineTo(150,30+i*50);
ctx.stroke();
} }
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="300"></canvas>
</div>
</body>
</html>

效果展示:

b、ctx.lineJoin

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d'); var lineJoin = ['round','bevel','miter'];
ctx.strokeStyle = 'red'; for( var i=0; i<lineJoin.length; i++){
ctx.lineWidth = 20;
ctx.lineJoin = lineJoin[i];
ctx.beginPath();
ctx.moveTo(10+i*150,30);
ctx.lineTo(100+i*150,30);
ctx.lineTo(100+i*150,100);
ctx.stroke();
} }
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="600" height="300"></canvas>
</div>
</body>
</html>

效果展示: 

c、miterLimit

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
ctx.translate(30,40);
for( var i=0; i<10; i++){
ctx.strokeStyle = '#FF5D43';
ctx.lineWidth = 10;
ctx.lineJoin = 'miter';
ctx.miterLimit = i*10;
ctx.beginPath();
ctx.moveTo(10,i*30);
ctx.lineTo(100,i*30);
ctx.lineTo(10,i*33);
ctx.stroke();
} }
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="400"></canvas>
</div>
</body>
</html>

效果显示:

2、绘制线性变化

ctx.createLinearGradient(x1,y1,x2,y2); x1、y1为渐变的起点, x2,y2为渐变的终点

使用addColorStop(position,color)方法进行上色,

eg:

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
var lingrad = ctx.createLinearGradient(0,0,0,200);
lingrad.addColorStop(0,'#f00');
lingrad.addColorStop(1/7,'#f90');
lingrad.addColorStop(2/7,'#ff0');
lingrad.addColorStop(3/7,'#0f0');
lingrad.addColorStop(4/7,'#0ff');
lingrad.addColorStop(5/7,'#00f');
lingrad.addColorStop(6/7,'#f0f');
lingrad.addColorStop(1,'#f00');
ctx.fillStyle = lingrad;
ctx.strokeStyle = lingrad;
ctx.fillRect(10,10,200,200);
} </script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="400"></canvas>
</div>
</body>
</html>

3、绘制径向渐变

要绘制径向变化,首先要使用createRadialGradient方法创建canvasGradient。然后即可使用addColorStop方法定义色标的位置并进行上色。

ctx.createRadialGradient(x1,y1,r1,x2,y2,r2); 其中x1,y1,r1定义一个为以(x1,y1)为坐标,半径为r1的圆,x2,y2,r2定义一个为以(x2,y2)为坐标,半径为r2的圆,

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
var radgrad = ctx.createRadialGradient(55,55,20,100,100,90);
radgrad.addColorStop(0,'#fff');
radgrad.addColorStop(0.5,'#f00');
radgrad.addColorStop(1,'#000'); ctx.fillStyle = radgrad;
ctx.fillRect(10,10,200,200);
} </script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="400"></canvas>
</div>
</body>
</html>

4、绘制图案

在多数绘图软件中都有填充图案这个功能,在canvas中,有 createPattern 方法来实现图案效果。

ctx.createPattern(image,type);

其中参数image为要引用的image对象或另一个canvas对象,type是所引用对象的平铺类型,如:repeat、repeat-x, repeat-y,no-repeat必须为下面的字符串值之一。

创建图案的步骤与创建渐变有些类似,需要首先创建出一个pattern,然后再赋予其fillStyle属性或strokeStyle属性。

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
};
function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
var img = new Image();
img.src = 'butterf.png';
img.onload = function(){
//创建图案
var prtn = ctx.createPattern(img,'repeat');
ctx.fillStyle = prtn;
ctx.fillRect(0,0,600,600);
}; } </script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="500" height="500"></canvas>
</div>
</body>
</html>

5、设置图片的透明度

使用globalAlpha可以设置图形的透明度,改方法适合为大量图形设置相同的透明度。 除此之外,还可以通过设置色彩透明度的参数来为图形设置不同的透明度。

rgba(r,g,b,a);

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width:300px; height: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
}; function draw(){
var c = document.getElementById('myCanvas');
var ctx = c.getContext('2d');
ctx.translate(180,20); for(var i=0; i<50; i++){
ctx.save();
ctx.transform(0.95,0,0,0.95,30,30);
ctx.rotate(Math.PI/12);
ctx.beginPath();
ctx.fillStyle = 'rgba(255,0,0,'+(1-(i+10)/40)+')';
ctx.arc(0,0,50,0,Math.PI*2,true);
ctx.closePath();
ctx.fill();
}
}
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="300" height="300"></canvas>
</div>
</body>
</html>

6、创建阴影

在canvas中创建阴影效果,需要用到下面这4个属性:shadowOffsetX(阴影的水平偏移)、shadowOffsetY(阴影的垂直偏移)、shadowBlur(阴影羽化的程度)和shadowColor(阴影的颜色),默认为黑色,可以添加透明度。用法如下:

ctx.shadowOffsetX = float;

ctx.shadowOffsetY = float;

ctx.shadowBlur = float;

ctx.shadowColor = color;

 <!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style type="text/css">
*{padding: 0;margin:0;}
body{background: #1b1b1b;}
#div1{margin:50px auto; width:300px; height: 300px;}
canvas{background: #fff;}
</style>
<script type="text/javascript">
window.onload = function(){
draw();
}; function draw(){
var ctx = document.getElementById('myCanvas').getContext('2d');
//设置阴影
ctx.shadowOffsetX = 3; //水平偏移
ctx.shadowOffsetY = 8; //垂直偏移
ctx.shadowBlur = 2; //羽化程度
ctx.shadowColor = 'rgba(255,0,0,0.5)';
//绘制矩形
ctx.fillStyle = '#3cf';
ctx.fillRect(20,20,300,60);
ctx.fill(); //绘制文本
ctx.font = '40px 微软雅黑';
ctx.fillStyle = '#fff';
ctx.fillText('HTML5+CSS3',30,64);
}
</script>
</head>
<body>
<div id="div1">
<canvas id="myCanvas" width="400" height="300"></canvas>
</div>
</body>
</html>

canvas线性变换、颜色和样式选择的更多相关文章

  1. HTML5 Canvas 中的颜色、样式和阴影的属性和方法

    颜色.样式和阴影的属性与方法 fillStyle                设置或返回用于填充绘画的颜色.渐变或模式 strokeStyle         设置或返回用于笔触的颜色.渐变或模式 ...

  2. [js高手之路] html5 canvas系列教程 - 文本样式(strokeText,fillText,measureText,textAlign,textBaseline)

    接着上文线条样式[js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)继续. canvas提供两种输出文本的方 ...

  3. python 输出颜色与样式的方法

    上次遇到这个问题就想写下来,其实当时我也不怎么会,老师说这个东西不需要理解,只需要死记硬背,写的多了就记住了,所以今天搜集了几篇文章,加上自己的理解,写下了这篇python 输出颜色的样式与方法的文章 ...

  4. 色彩缤纷的python(改变字体颜色及样式不完全版)

    色彩缤纷的python(改变字体颜色及样式) *补上昨天随笔中提到的改变字体颜色样式的方法,昨日随笔https://www.cnblogs.com/Du704/p/11265958.html 在项目过 ...

  5. 色彩缤纷的Python(改变字体颜色及样式)

    色彩缤纷的python(改变字体颜色及样式) 在项目过程中,我们常常会因为输出信息的颜色与样式过于单调以至于让人在视觉上感到很杂乱,所以看下文: 在Linux终端中,使用转义序列来进行如上所述的显示, ...

  6. python输出颜色与样式的方法

    一.输出颜色与样式的方法 上次遇到这个问题就想写下来,其实当时我也不怎么会,老师说这个东西不需要理解,只需要死记硬背,写的多了就记住了,所以今天搜集了几篇文章,加上自己的理解,写下了这篇python ...

  7. 黄聪:phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包含了PHPExcel.php和PHPExcel的文件夹,这个类文件和文件夹是我们需要的,把class ...

  8. 基于jquery封装的颜色下拉选择框

    应同事要求,花了半个小时,写了一个简单的选择颜色的下拉框控件,可以控制输入框指示结果颜色 也贴出来,说不定哪天有用 if (typeof jQuery === 'undefined') { throw ...

  9. phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护

    转:http://www.cnblogs.com/huangcong/p/3687665.html 首先到phpexcel官网上下载最新的phpexcel类,下周解压缩一个classes文件夹,里面包 ...

随机推荐

  1. 更新表中数据可以使用join

    1.在修改数据库的时候,每写完一条SQL语句都要加上一个分号,这样每句之间是有依赖关系的,上面执行不成功不会执行下面的语句. 2.在更新数据库中数据时可以使用join. 例如: update res ...

  2. 干货!Jenkins下配置findbugs、pmd及checkstyle实现代码自动检测

    配置前提: 对于maven项目来说,需要在pom.xml文件的<build><plugins>添加配置</plugins></build> 网上有些地方 ...

  3. 深拷贝与浅拷贝js,方法

    在使用JavaScript对数组进行操作的时候,我们经常需要将数组进行备份,事实证明如果只是简单的将它赋予其他变量,那么我们只要更改其中的任何一个,然后其他的也会跟着改变,这就导致了问题的发生. 参考 ...

  4. Codeforces Round #412 (rated, Div. 2, base on VK Cup 2017 Round 3) A Is it rated?

    地址:http://codeforces.com/contest/807/problem/C 题目: C. Success Rate time limit per test 2 seconds mem ...

  5. cocos2dx lua invalid 'cobj' in function 'lua_cocos2dx‘ 躺坑

    for 循环中保存了创建的 Node节点到 userdata 数据结构中 再次引用发现 一直报 LUA ERROR: [string ".\framework/cocos2dx/NodeEx ...

  6. Linux使用free命令查看实际内存占用

    转自:http://www.cnblogs.com/pengdonglin137/p/3315124.html Linux下在终端环境下可以使用free命令看到系统实际使用内存的情况,一般用free ...

  7. iOS开发之AFNetworking网络编程

    众所周知,苹果搞的一套框架NSContention发送请求与接收请求的方式十分繁琐.操作起来很不方便.不仅要做区分各种请求设置各种不同的参数,而且还要经常在多线程里操作,同时还要对请求与返回的数据做各 ...

  8. python 数据分析----matplotlib

    Matplotlib是一个强大的Python绘图和数据可视化的工具包. 安装方法:pip install matplotlib 引用方法:import matplotlib.pyplot as plt ...

  9. Helloworld.JaVa 第一次编程

    package Jc; class Jc1st { public static void main(String[] args) { System.out.println("Hello Wo ...

  10. 20135320赵瀚青LINUX第一章读书笔记

    第一章-Linux内核简介 Unix的历史 依旧被认为是最强大和最优秀的系统 由一个失败的操作系统Multics中产生 被移植到PDP-11型机中 由其他组织进一步开发 重写了虚拟内存系统,最终官方版 ...