今天看到一个讲Canvas的教程,很通俗移动,所以转载了下。

虽然大家都称Canvas为html5的新标签,看起来好像Canvas属于html语言的新知识,但其实Canvas画图是通过javascript来做的。所以,如果你想学习Canvas画图,你必须要有Javascript基础。 
另外,画图嘛,总有一些图像方面的术语和知识点,所以如果你有过做图或美工经验,学习Canvas会更容易。

Canvas,意为画布也。而Html5中的Canvas也真的跟现实生活中的画布非常相似。所以,把他看成一块实实在在的画布可以加快理解。

画布 
用canvas作画,首先,你需要有一块“画布”。如果你的书架里面没有画布,你可以买一卷回来放进去。当然,在网页里面我们不需要花钱买,直接写一个canvas即可,类似:

代码如下:
<canvas id="cvs" width="800" height="600">你的浏览器不支持canvas</canvas>

其中标签里面的文字是给不支持canvas的浏览器看的,支持的永远看不到。 
这个画布的特性有必要说一下,他有两个原生的属性,即width和height.同时,因为他也是一个html元素,所以他也可以使用css来定义width和height,但是,千万要注意:他自身的宽高和通过css定义的宽高是不一样的! 
我们用JS来改变Canvas的宽高,是这样的:

代码如下:
canvas.width= 400
canvas.height = 300 

但用JS通过操作CSS来改变Canvas的宽高,则是这样:

代码如下:
canvas.style.width = '400px'
canvas.style.height = '300px' 

看得出来,语法上区别是很明显的。实际上区别更明显。

他们的区别是什么? 
比如一块宽1000的画布,你在画布左侧画了一条竖线,宽100像素。此时你把画布自身的width设为500,相当于把画布的右半边咔嚓掉了,但此时那竖线的宽度还是100。 
但如果你通过CSS来把画布的宽度变成500,那就相当于把画布由1000挤压到500,所以竖线的宽度变成了50. 
(这只是理论情况,设置canvas的宽度时,实际上重置canvas的宽或者高,他都会清空掉已画出来的内容。。P.S.如果实验的是时候尺寸不对的话,看看HTML的meta头部的viewport) 
Canvas自身的宽高就是画布本身的属性,而css给他的宽高则可以看作是缩放,如果你缩放的太过随意,那么画布上的图形可能变得你自己都认不出来。 
所以有个建议:除非特殊情况,一定不要用css来定义Canvas的宽高。 
画布有了,现在我们把他拿出来:

复制代码

代码如下:

var cvs = document.getElementById('cvs'); 

看,跟获取其他元素的办法一模一样。

画笔 
现在画布已经有了,想往上面涂鸦,当然还需要一只笔。canvas取得笔的方法如下: 
var ctx = cvs.getContext('2d');其中getContext方法就是用来拿笔的,但这里还有个参数:2d,这是什么意思呢?这个可以看作是画笔的种类。 
既然有2D,那么就会有3d了?以后估计会有,但现在没有。所以我们先用这只2d的笔吧。

那么我们可以多放几只笔来备用吗?答案是不能。 
我要问一个问题:你画图的时候是同时用几只笔呢?相信99.9%的人都是只能用一只,虽然有些武林高手比如小龙女之类的可以两只手同时画,但这对一般人来说很不现实,是不是? 
所以现在你可以感到欣慰了,因为html5的canvas标签也只支持同时用一支笔! 
有的写JS写的比较熟的同学可能会想耍个小聪明:我用前面获取画笔的方法多整几只笔出来,不就行了?!
比如:

复制代码

代码如下:

var con = cvs.getContext('2d');
var ctx = cvs.getContext('2d'); 

哈哈哈哈,好像成功了,在没测试之前我也是这么想的,但,其实这只是一个幻觉! 
因为我发现,我把其中一支笔蘸上红墨水,另外一支笔也自动蘸上了红墨水!因为两支笔是一体的!fuck。 
如果你需要画出不同的颜色,办法就是把这只唯一的“笔”不停的蘸上新颜色。 
这其实不是一个优点,是个缺陷,以后你会体会到的。

坐标 
2d世界,就是平面,在一个平面上确定一个点,需要两个值,x坐标和y坐标。这是一个很重要的基础概念。
canvas的原点是左上角,跟flash一样。但蛋疼的是数学中的原点是左下角。这个…只能说习惯就好

一些画图的基本常识 
首先你需要知道,怎样的坐标变化会画出什么线?比如,x坐标变大而y坐标不变,则能画出一条横线;y坐标变化而x坐标不变,则是一条竖线。 
当然,还有斜线,左斜线右斜线什么的,如果能对照图片,大部分人都能一看即懂;只是用代码画起来就比较郁闷了,只能靠逻辑思维想出来。 
如果你现在感觉对线条一片混沌,也不用担心,在学习的过程中自然会理解。

其他 
canvas有一个和现实的画布不一样的特点就是,他默认是透明的,没有背景色。这在大部分时候非常重要。

转载于:https://www.cnblogs.com/chijijuedi/p/4151269.html

[转]html5 Canvas画图教程(1)—画图的基本常识相关推荐

  1. [js高手之路] html5 canvas系列教程 - 掌握画直线图形的常用API

    我们接着上文[js高手之路] html5 canvas系列教程 - 认识canvas以及基本使用方法继续. 一.直线的绘制 cxt.moveTo( x1, y1 ): 将画笔移动到x1, y1这个点 ...

  2. 前端画圆弧html弧线的像素,[js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)...

    arc:画弧度 cxt.arc( x, y, 半径, 开始角度,结束角度,是否逆时针 ); x, y: 为弧度的中心横坐标和纵坐标,如果这是画一个圆.那么x,y就是圆的圆心. 开始角度与结束角度都是以 ...

  3. [js高手之路] html5 canvas系列教程 - 线条样式(lineWidth,lineCap,lineJoin,setLineDash)

    上文,写完弧度与贝塞尔曲线[js高手之路] html5 canvas系列教程 - arcTo(弧度与二次,三次贝塞尔曲线以及在线工具),本文主要是关于线条的样式设置 lineWidth: 设置线条的宽 ...

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

    canvas提供两种输出文本的方式: strokeText:描边文本 fillText:填充文本 fillStyle配合fillText使用,strokeStyle配合strokeText使用 str ...

  5. 基于HTML5 Canvas和jQuery 的画图工具的实现

    简介 HTML5 提供了强大的Canvas元素,使用Canvas并结合Javascript 可以实现一些非常强大的功能.本文就介绍一下基于HTML5 Canvas 的画图工具的实现.废话少说,先看成品 ...

  6. html5 Canvas颜色渐变(画图很重要)

    如果我们想要给图形上色,有两个重要的属性可以做到:fillStyle 和 strokeStyle.    fillStyle = color    strokeStyle = color stroke ...

  7. php画图教程,php画图实例_PHP

    本文实例讲述了php画图的方法.分享给大家供大家参考.具体实现方法如下: 代码如下: // by MoreWindows $imgWidth = 600; $imgHeight = 400; $img ...

  8. 《HTML5 CANVAS基础教程》读书笔记

    一.HTML5简介 1.HTML5新特性 1)结构元素:section,header,hgroup,footer,nav,article,aside, 2)内容元素:figure,figcaption ...

  9. [js高手之路]html5 canvas动画教程 - 下雪效果

    利用canvas,实现一个下雪的效果,我们先预览下效果: 我们先分析下这个效果: 1,随机产生雪花 2,雪花的产生不是同时产生,而是有先后顺序的 3,雪花怎么表示 4,怎么源源不断的下雪 5,雪花有大 ...

最新文章

  1. java collections_【Java视频教程】day31-集合练习??
  2. 凌晨1点突发致命生产事故!看的我惊心动魄…
  3. ubuntu装双系统win7和linux,Ubuntu下安装WIn7(双系统)
  4. swift解析html数据类型,ios-Swift:以标签或textVi显示HTML数据
  5. Cloud一分钟 | 阿里云将在英国大区设立数据中心
  6. 利用python scapy包进行抓包发包与ARP扫描
  7. java mvc 源码分析_SpringMVC 源码解读笔记
  8. 刘汝佳--WERTY
  9. 服务器装系统03系统,windows server 2003 服务器安装教程完整版
  10. Cocoa和Cocoa Touch框架浅析
  11. JPEG图像存储格式
  12. file-saver实现文件流下载
  13. Arch yaourt 安装
  14. 车险杀手锏——高速大数据在车险定价中的应用
  15. YOLOv5-v5.0模块流程图
  16. 我们怎么做那个“卖铲子的人”
  17. 操作系统资源分配管理
  18. windows10 安装 cuda8.0 cudnn6.0 tensorflow-gpu1.3.0 pycharm jupyter 及路径
  19. 手工皮具-不可避免的进入染色过程
  20. 触宝科技sp专场面试复盘

热门文章

  1. java cpu 占用高问题定位
  2. .net应用程序版本控制
  3. Cisco IOS防火墙的安全规则和配置方案
  4. javascript 之---正则表达式
  5. mac php-frm xampp_XAMPP for Mac(Apache服务器环境套件)
  6. 以下可以作为c语言合法变量名的是,2016年河南科技学院信息工程学院C语言上机编程复试笔试最后押题五套卷...
  7. MySQL高级 - 内存优化 - MyISAM内存优化
  8. RabbitMQ入门-环境搭建
  9. Spring源码版本命名规则及下载安装(下)笔记
  10. Response_案例1_重定向_特点