创建canvas

您的浏览器不支持canvas

基础设置

var canvas = document.getElementById('myCanvas');var ctx = canvas.getContext('2d');

canvas.width=100;

canvas.height=100;

画直线

moveTo(x1, y1)

lineTo(x2, y2)

ctx.moveTo(0, 0);

ctx.lineTo(100, 100);

ctx.stroke();

画圆形

ctx.arc(x,y,radius,0,2*Math.PI,true)

ctx.beginPath();

ctx.arc(300,300,50,0,2*Math.PI,true);

ctx.strokeStyle= '#000';

ctx.stroke();

画矩形

ctx.strokeRect(x1, y1,x2, y2)

ctx.strokeRect(300,100,200,100);

beginPath()开始一条新路径

closePath()使当前路径闭合

不是成对出现的

ctx.beginPath();

ctx.moveTo(300, 0);

ctx.lineTo(200, 100);

ctx.lineTo(200, 200);

ctx.closePath();

ctx.strokeStyle= '#0F0';

ctx.stroke();

设置样式

ctx.moveTo(0,0);

ctx.lineTo(100,100);

ctx.lineTo(100,200);

ctx.closePath();//lineWidth 设置描边的线宽

ctx.lineWidth = 10;//strokeStyle 设置描边样式

ctx.strokeStyle = "#F00";

ctx.stroke();//fillStyle 设置填充样式

ctx.fillStyle = "rgba(0,255,0,0.5)";

ctx.fill();

绘制矩形与样式同步

ctx.strokeRect(100,200,100,100);

ctx.fillRect(100,200,100,100);

保存和恢复上下文环境,一般成对出现

save 保存当前绘画环境,包括变换和样式

restore 恢复当前绘画环境,包括变换和样式

ctx.save();

ctx.restore();

图形变换

//translate 平移变换

ctx.translate(0,100);

ctx.beginPath();

ctx.moveTo(0,0);

ctx.lineTo(100,100);

ctx.stroke();//rotate 旋转变换

ctx.rotate(Math.PI/4);

ctx.beginPath();

ctx.moveTo(0,0);

ctx.lineTo(100,100);

ctx.lineWidth= 5;

ctx.strokeStyle= "#F00";

ctx.stroke();//scale 缩放变换

ctx.scale(1,0.5);

ctx.fillRect(0,-100,100,100);

线性渐变

var linearGradient = ctx.createLinearGradient(0, 0, 200, 0);//给渐变添加颜色

linearGradient.addColorStop(0, 'rgb(255,0,0)');

linearGradient.addColorStop(0.3, 'rgb(0,255,0)');

linearGradient.addColorStop(1, 'rgb(0,0,255)');//设置渐变作为样式

ctx.fillStyle =linearGradient;

ctx.fillRect(0, 0, 200, 200);

径向渐变

var radialGradient = ctx.createRadialGradient(400, 50, 0, 400, 150, 100);

radialGradient.addColorStop(0, 'rgb(255,255,0)');

radialGradient.addColorStop(1, 'rgb(0,0,0)');

ctx.fillStyle=radialGradient;

ctx.beginPath();

ctx.arc(400, 150, 100, 0, Math.PI * 2, true);

ctx.fill();

文字

字体若设置了居中,圆心会在文字的中间位置,所以圆心还是要根据画布大小和文字的宽度进行设置。

var str = "hello world";//设置文本样式,比如大小,字体

ctx.font = "50px sans-serif";//水平对其设置,left center right

ctx.textAlign = "center";//垂直对齐设置,top middle bottom

ctx.textBaseline = "top";//填充文本

ctx.fillText(str,300,0);//描边文本

ctx.strokeText(str,0,200);//获取文本宽度

var width =ctx.measureText(str).width;

console.log(width);

图片

ctx.fillRect(0, 0, canvas.width, canvas.height);var img = newImage();

img.src= "logo.png";//一定要在图像加载完成后的回调中绘制图像

img.onload = function() {//在(0,0)点处绘制img图像

//ctx.drawImage(img, 0, 0);

//在(0,0)点处绘制img图像,缩放成256*80

//ctx.drawImage(img, 0, 0, 256, 80);

//获取img图像的(0,0)点处的40*40区域,绘制在(100,100)点处,缩放成80*80

ctx.drawImage(img, 0, 0, 40, 40, 100, 100, 80, 80);

}

创建图像画刷ctx.createPattern(image, type)

ctx.fillRect(0, 0, canvas.width, canvas.height);var img = newImage();

img.src= "logo.png";

img.οnlοad= function() {//创建图像画刷,no-repeat,repeat-x,repeat-y,repeat

var pattern = ctx.createPattern(img, "repeat");

ctx.fillStyle=pattern;

ctx.fillRect(0, 0, canvas.width, canvas.height);

}

阴影绘制

//阴影的X偏移

ctx.shadowOffsetX = 10;//阴影的Y偏移

ctx.shadowOffsetY = 10;//阴影的颜色

ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';//阴影的模糊度

ctx.shadowBlur = 10;

ctx.fillStyle= 'rgba(255, 0, 0, 0.5)';

ctx.fillRect(100, 100, 100, 100);

ctx.font= "50px sans-serif";

ctx.fillText("我是小可爱",200,100);

区域剪辑

//保存当前环境

ctx.save();

ctx.arc(300, 100, 200, 0, Math.PI*2, true);//进行区域剪辑

ctx.clip();

ctx.fillStyle= "#F00";

ctx.fillRect(100, 100, 200, 200);//恢复环境,释放了剪辑区域的作用

ctx.restore();

绘制曲线ctx.arc(x, y, startAngle, endAngle ,Math.PI*2, true)

最后一个参数代表是否是逆时针方向

//绘制圆弧

ctx.arc(100, 100, 50, 0 ,Math.PI*2, true);

ctx.fill();//二次样条曲线ctx.quadraticCurveTo(qcpx,qcpy,qx,qy)

ctx.beginPath();

ctx.moveTo(100,355);

ctx.quadraticCurveTo(265,145,380,349);

ctx.fill();//贝塞尔曲线ctx.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y)

ctx.beginPath();

ctx.moveTo(175,375);

ctx.bezierCurveTo(297,182,468,252,517,380);

ctx.fill();

canvas绘制曲线生成工具

两次贝塞尔曲线:

http://blogs.sitepointstatic.com/examples/tech/canvas-curves/quadratic-curve.html

三次贝塞尔曲线:

http://blogs.sitepointstatic.com/examples/tech/canvas-curves/bezier-curve.html

动画

ctx.clearRect(x, y, width, height) 清除区域,用于重新绘制

var canvas = document.getElementById('myCanvas');var ctx = canvas.getContext('2d');var posx = 0, posy = 0, dir = 1, isMouseInRect = false;//确定动画范围

canvas.onmousemove = function(e){var mouseX =e.offsetX;var mouseY =e.offsetY;if(mouseX > posx && mouseY posy && mouseY < posy+ 50){

isMouseInRect= true;

}else{

isMouseInRect= false;

}

}//开始动画

setInterval(function() {if(!isMouseInRect){

posx+= 10 *dir;

}//clearRect清空画布的一个矩形区域

ctx.clearRect(0, 0, canvas.width, canvas.height);

ctx.fillRect(posx, posy,50, 50);if(posx + 50 >=canvas.width){

dir= -1;

}else if(posx <= 0){

dir= 1;

}

},100);

离屏技术

把canvas(sx,sy)处宽sw,高sy的区域,绘制到(dx,dy)处,并缩放为宽dx,高dh

ctx.drawImage(canvas,sx,sy,sw,sh,dx,dy,dw,dh)

canvas

canvas{border:1px solid red;

}#offCanvas{display:none;

}

您的浏览器不支持canvas

您的浏览器不支持canvas

varcanvas=document.getElementById('myCanvas');varctx=canvas.getContext('2d');varoffCanvas=document.getElementById('offCanvas');varoffCtx=offCanvas.getContext('2d');varposx= 0, posy= 0, dir= 1, isMouseInRect= false;//把一些复杂的绘画操作,画在离屏Canvas上面

vardrawALot= function(){for(vark=0; k<20; k++){for(vari=0;i

offCtx.beginPath();

offCtx.arc(i,j,5,0,2*Math.PI,true);

offCtx.stroke();

}

}

}

}

canvas.οnmοusemοve= function(e){varmouseX=e.offsetX;varmouseY=e.offsetY;if(mouseX>posx&&mouseYposy&&mouseY

isMouseInRect= true;

}else{

isMouseInRect= false;

}

}

setInterval(function() {if(!isMouseInRect){

posx+= 10 *dir;

}//clearRect清空画布的一个矩形区域

ctx.clearRect(0,0, canvas.width, canvas.height);//drawALot();

//真正要用到复杂的绘画的时候,直接从离屏Canvas上拷贝过来

ctx.drawImage(offCanvas,0,0,offCanvas.width, offCanvas.height,0,0, canvas.width, canvas.height);

ctx.fillRect(posx, posy,50,50);if(posx+ 50 >=canvas.width){

dir= -1;

}else if(posx<= 0){

dir= 1;

}

},100);

drawALot();

java名片生成_HTML5 canvas绘图基础(电子名片生成器源码)相关推荐

  1. java名片合成_HTML5 canvas绘图基础(电子名片生成器源码)

    创建canvas 您的浏览器不支持canvas 基础设置 var canvas = document.getElementById('myCanvas');var ctx = canvas.getCo ...

  2. Java云电子病历系统源码,提供电子病历在线制作、管理和使用的一体化电子病历

    这是一套SaaS模式Java版云HIS系统的子系统云电子病历系统源码,本系统采用前后端分离模式开发和部署,支持电子病历四级. 文末获取源码联系! 本电子病历系统主要为医院住院部提供医疗记录依据,协助医 ...

  3. 计算机毕业设计Java电子病历系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java电子病历系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java电子病历系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...

  4. JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库

    JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库 JAVA毕业设计汇美食电子商城计算机源码+lw文档+系统+调试部署+数据库 本源码技术栈: 项目架构:B/S架构 开发语言: ...

  5. Java计算机毕业设计大学生健康电子档案系统源码+系统+数据库+lw文档

    Java计算机毕业设计大学生健康电子档案系统源码+系统+数据库+lw文档 Java计算机毕业设计大学生健康电子档案系统源码+系统+数据库+lw文档 本源码技术栈: 项目架构:B/S架构 开发语言:Ja ...

  6. 计算机毕业设计Java大学生健康电子档案系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java大学生健康电子档案系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java大学生健康电子档案系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构 ...

  7. 计算机毕业设计Java电子商城系统(源码+系统+mysql数据库+lw文档)

    计算机毕业设计Java电子商城系统(源码+系统+mysql数据库+lw文档) 计算机毕业设计Java电子商城系统(源码+系统+mysql数据库+lw文档) 本源码技术栈: 项目架构:B/S架构 开发语 ...

  8. java毕业设计——基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码)——邮件收发系统

    基于Java+Javamail的邮件收发系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+Javamail的邮件收发系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦 ...

  9. Java定时任务(一) Timer及TimerTask的案例解析及源码分析

    Java定时任务(一)  Timer及TimerTask的案例解析及源码分析 一.概述: 定时任务这个概念在Java的学习以及项目的开发中并不陌生,应用场景也是多种多样.比如我们会注意到12306网站 ...

  10. java毕业设计——基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码)——视频会议系统

    基于Java+Socket的视频会议系统设计与实现(毕业论文+程序源码) 大家好,今天给大家介绍基于Java+Socket的视频会议系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦.需要下 ...

最新文章

  1. 赠书 | 手把手教你自己动手打造一个智能恒温器
  2. 海思移植opencv+车辆检测
  3. mysql stdistance_postgis的geography_columns和geometry_columns有什么区别
  4. java.net.SocketException: 权限不够
  5. 学习Spring Boot:(五)使用 devtools热部署
  6. Redis 命令行工具有趣的罕见用法
  7. 十八般武艺玩转GaussDB(DWS)性能调优:Plan hint运用
  8. 【算法】第76题 Minimum Window Substring
  9. chrome 浏览器的插件权限有多大?
  10. 给JDBC换个装——连接解耦
  11. hashmap containsvalue时间复杂度_恕我直言,你真的了解HashMap吗?
  12. hermite插值法 matlab,分段三次Hermite插值Matlab实现
  13. @ParserError: field larger than field limit (131072)
  14. 如何部署自定义统计图
  15. 关于电子账户开户四五要素
  16. 将阿拉伯数字转为中文数字读法
  17. WPF 逻辑树和可视化树
  18. 华为云Centos7搭建hadoop集群二:yum源替换,ssh免密处理,hadoop用户sudo
  19. Android 原生Gallery3d的优化系列--1
  20. T flip-flop

热门文章

  1. 数据至上的人工智能时代,哪些公开数据集最适合?
  2. 贪吃蛇程序设计报告python_贪吃蛇程序设计报告
  3. c# chart 各个属性_C# WINFORM项目Chart控件显示问题
  4. Clip_by_norm 函数理解
  5. 小试牛刀1:制作一个简单的导航栏页面
  6. zblog仿站教程 - 常用模板标签
  7. 项目管理(PMP)认证介绍
  8. 一个简单的python爬虫,以豆瓣妹子“http://www.dbmeizi.com/category/2?p= ”为例
  9. javaScript实现百度换肤案例
  10. CreateIoCompletionPort和完成端口