HTML5画布(Canvas)速查表

HTML5 <canvas> 标签用于绘制图像。<canvas> 元素本身仅仅是图形的容器,必须使用脚本来完成实际的绘图任务。HTML5 <canvas> 可用于在画布上绘制文本、线条、矩形、圆形等等。

HTML5画布(Canvas)元素

<canvas id="myCanvas" width="500" height="300">

浏览器不支持画布(canvas)时

<canvas id="myCanvas" width="500" height="300">
  your browser doesn't support canvas!
</canvas>

2d context

var context = canvas.getContext('2d');

Webgl context (3d)

var context = canvas.getContext('webgl');

图形

绘制方形

context.rect(x, y, width, height);
context.fill();
context.stroke();

填充区域

context.fillRect(x, y, width, height);

绘制方形的边框

context.strokeRect(x, y, width, height);

绘制圆形

context.arc(x, y, radius, 0, Math.PI * 2);
context.fill();
context.stroke();

风格

填充

context.fillStyle = 'red';
context.fill();

勾勒

context.strokeStyle = 'red';
context.stroke();

线性渐变

var grd = context.createLinearGradient(x1, y1, x2, y2);
grd.addColorStop(0, 'red');   
grd.addColorStop(1, 'blue');
context.fillStyle = grd;
context.fill();

径向渐变

var grd = context.createRadialGradient(x1, y1, radius1, x2, y2, radius2);
grd.addColorStop(0, 'red');
grd.addColorStop(1, 'blue');
context.fillStyle = grd;
context.fill();

图案

var imageObj = new Image();
imageObj.onload = function() {
  var pattern = context.createPattern(imageObj, 'repeat');
  context.fillStyle = pattern;
  context.fill();
};
imageObj.src = 'path/to/my/image.jpg';

交点

context.lineJoin = 'miter|round|bevel';

线头

context.lineCap = 'butt|round|square';

阴影

context.shadowColor = 'black';
context.shadowBlur = 20;
context.shadowOffsetX = 10;
context.shadowOffsetY = 10;

Alpha (透明)

context.globalAlpha = 0.5; // between 0 and 1

颜色格式

字符串

context.fillStyle = 'red';

16进制

context.fillStyle = '#ff0000';

16进制简写

context.fillStyle = '#f00';

RGB

context.fillStyle = 'rgb(255,0,0)';

RGBA

context.fillStyle = 'rgba(255,0,0,1)';

路径

开始路径

context.beginPath();

画线

context.lineTo(x, y);

弧形

context.arc(x, y, radius, startAngle, endAngle, counterClockwise);

二次曲线

context.quadraticCurveTo(cx, cy, x, y);

二次曲线

context.bezierCurveTo(cx1, cy1, cx2, cy2, x, y);

关闭路径

context.closePath();

图片

画图

var imageObj = new Image();
imageObj.onload = function() {
  context.drawImage(imageObj, x, y);
};
imageObj.src = 'path/to/my/image.jpg';

指定尺寸画图

var imageObj = new Image();
imageObj.onload = function() {
  context.drawImage(imageObj, x, y, width, height);
};
imageObj.src = 'path/to/my/image.jpg';

裁剪图片

var imageObj = new Image();
imageObj.onload = function() {
  context.drawImage(imageObj, sx, sy, sw, sh, dx, dy, dw, dh);
};
imageObj.src = 'path/to/my/image.jpg';

文本

写文字

context.font = '40px Arial';
context.fillStyle = 'red';
context.fillText('Hello World!', x, y);

写镂空文字

context.font = '40pt Arial';
context.strokeStyle = 'red';
context.strokeText('Hello World!', x, y);

粗体

context.font = 'bold 40px Arial';

斜体

context.font = 'italic 40px Arial';

对齐方式

context.textAlign = 'start|end|left|center|right';

文字基线

context.textBaseline = 'top|hanging|middle|alphabetic|ideographic
|bottom';

获取文本宽度

var width = context.measureText('Hello world').width;

动画

移动

context.translate(x, y);

扩大缩小

context.scale(x, y);

旋转

context.rotate(radians);

水平翻转

context.scale(-1, 1);

上下翻转

context.scale(1, -1);

自定义变换

context.transform(a, b, c, d ,e, f);

设置变换

context.setTransform(a, b, c, d ,e, f);

切割

context.transform(1, sy, sx, 1, 0, 0);

重置

context.setTransform(1, 0, 0, 1, 0, 0);

状态存储

存储

context.save();

恢复

context.restore();

裁剪

裁剪

// draw path here
context.clip();

图像数据

获取图像数据

var imageData = context.getImageData(x, y, width, height);
var data = imageData.data;

遍历像素点

var imageData = context.getImageData(x, y, width, height);
var data = imageData.data;
var len = data.length;
var i, red, green, blue, alpha;

for(i = 0; i < len; i += 4) {
  red = data[i];
  green = data[i + 1];
  blue = data[i + 2];
  alpha = data[i + 3];
}

沿坐标遍历像素点

var imageData = context.getImageData(x, y, width, height);
var data = imageData.data;
var x, y, red, green, blue, alpha;

for(y = 0; y < imageHeight; y++) {
  for(x = 0; x < imageWidth; x++) {
    red = data[((imageWidth * y) + x) * 4];
    green = data[((imageWidth * y) + x) * 4 + 1];
    blue = data[((imageWidth * y) + x) * 4 + 2];
    alpha = data[((imageWidth * y) + x) * 4 + 3];
  }
}

设置图像数据

context.putImageData(imageData, x, y);

DATA URLS

获取Data URL

var dataURL = canvas.toDataURL();

使用Data URL生成图像

var imageObj = new Image();
imageObj.onload = function() {
  context.drawImage(imageObj, 0, 0);
};

imageObj.src = dataURL;

合成

合成操作

context.globalCompositeOperation = 'source-atop|source-in|source-out|source-over|destination-atop|destination-in|destination-out|destination-over|lighter|xor|copy';

HTML5画布(Canvas)速查表

125jz网原创文章。发布者:江山如画,转载请注明出处:http://www.125jz.com/1349.html

(0)
江山如画的头像江山如画管理团队
18个优秀的CSS前端效果代码-网页设计师收藏
上一篇 2018年2月20日 下午3:35
人生哲理美文:正眼看人生&生命的意义
下一篇 2018年2月21日 上午10:09

99%的人还看了以下文章

  • 响应式布局和自适应的区别

    客户端,PC、平板、手机,各种尺寸,要给电脑PC和手机分别设计不同的网页吗?要给每一个手机分别设计一个网页吗? 不需要,因为有了响应式布局。 响应式布局被大家熟知的一个重要原因就是Twitter开源了bootstrap。。 响应式布局和自适应的区别: 自适应是为了解决如何才能在不同大小的设备上呈现相同的网页。 手机的屏幕比较小,宽度通常在600像素以下,pc…

    2019年10月15日
    5.5K0
  • HTML5- Canvas入门(二)画线并设置颜色

    HTML5- Canvas入门(二)画线并设置颜色HTML5- Canvas入门(二)画线并设置颜色HTML5- Canvas入门(二)画线并设置颜色HTML5- Canvas入门(二)画线并设置颜色

    HTML5- Canvas入门(一)画线 上一节课我们学会了 Canvas画线,绘制了一条黑色的直线,但如果我们想要绘制一条红色的或者其它颜色的线段,该怎么做呢? 答案很简单,使用ctx.strokeStyle来设定描边的颜色即可。我们画三条红色的线段吧: <canvas id=”myCanvas” width=”200″ height=”200″ s…

    2022年7月10日 网页制作
    12.1K0
  • div+css制作上中下,中间两列的全屏自适应布局

    制作自适应布局的网页对初学者是个难点,今天我们以最常见的上中下结构,中间又分为两列的全屏自适应布局为例,教大家如何制作自适应布局网页。 上中下结构,中间又分为两列的全屏自适应布局HTML代码: <div class=”g-hd”></div> <div class=”g-sd”></div> <div c…

    2018年8月2日
    7.6K0
  • 美观简洁的bootstrap 表单验证代码

    美观简洁的bootstrap 表单验证代码,如上图所示,点击登录按钮,在输入框下方显示错误提示信息 <!DOCTYPE html> <html> <head> <meta charset=”utf-8″ /> <title>ipput</title> <!– 新 Bootstra…

    2020年2月9日
    9.4K0
  • 注册表单验证常用js代码:用户名、密码、邮箱等字段验证

    <script language=”javascript”>   //验证是否为数字   function IsDigit(cCheck)       {       return ((‘0′<=cCheck) && (cCheck<=’9’));       }      //验证是否为英文字母        fun…

    2021年11月30日
    3.3K0
  • 手把手,永哥教你学会css sprite(雪碧图)技术

    css sprite又称雪碧图或css精灵。 雪碧图就是将小图标和背景图像合并到一张图片上,然后利用css的背景定位来显示需要显示的图片部分。 雪碧图被运用在众多使用了很多小图标的网站上。相对于把每张小图标以.png格式文件的形式引用到页面上,使用雪碧图只需要引用一张图片,对内存和带宽更加友好。 css sprite优点: 有效减少网站的http请求数量,加…

    2018年2月20日
    14.3K0

发表回复

登录后才能评论