canvas 常规操作

最近项目用了挺常用到 canvas 的,在这里做个记录,主要是为了备忘,省得老是查。


ctx.drawImage() —— 绘制图片

img, ( cutX, cutY, cutW, cutH ), putX, putY, ( W, H )

img 参数接受一个图像,可以是img标签,video标签或者另一个canvas。


ctx.fillText() —— 绘制文字

text, x, y, ( maxWidth )

将 text 字符串绘制到画布上,加上 maxWidth 参数会根据数值伸缩字符。
绘制文字前可以设置各种样式,比如 ctx.fillStyle='#FFF' , ctx.font = '24px' , ctx.textAlign 等。


ctx.textAlign —— 文字对齐

start | end | left | right | center

文字绘制以传参数的坐标点为基准,来对准文字的位置,如 center 则会将绘制文字的中点放在传参数的坐标上。(展示未区分出 start \ left 和 right \ end 的区别)


另外还有一种方法可以达到文字居中的效果,我将它用在单行居中多行左对齐的情况,核心方法:ctx.measureText( text ) ,该方法返回 text 的长度

var lineWidth = 0, // 设置默认值,当前行宽
    lineNum = 1, // 当前绘制第几行
    initHeight = 0, // 当前行与顶部距离
    lastSubStrIndex = 0; // 当前计算字符的序号
for (var i=0, len=text.length; i<len; i++) {
  lineWidth += ctx.measureText(text[i]).width; // 计算逐个字叠加的宽度
  if (lineWidth > 72*unit) { // 直到最大限制
    if (lineNum == 2) { // 最多显示两行,最后显示省略号
      text = text.substring(lastSubStrIndex, i-1) + ' ...'
      ctx.fillText(text, X, Y+(initHeight*lineNum+35));//绘制截取部分
      break;
    }
    // 填充当前行的内容
    ctx.fillText(title.substring(lastSubStrIndex, i) , X, Y+(initHeight*lineNum+35));//绘制截取部分
    initHeight += 26; 
    lineWidth = ctx.measureText(text[i]).width;
    lastSubStrIndex = i;
    lineNum += 1;
  } 
  if(i==text.length-1){//绘制剩余部分
    var pushCenter = 0;
    if (lineNum == 1) {// 只有一行则居中文字
      pushCenter = (72*unit-lineWidth)/2;
      initHeight = 26;
    }
    ctx.fillText(title.substring(lastSubStrIndex,i+1), 14*unit + pushCenter, 40*unit+(initHeight*lineNum+35));
  }
}


ctx.arc() —— 绘制圆形(弧线)

X, Y, R, start°, end°, ( 顺时针-false | 逆时针-true )

绘制好弧形路径之后,使用 stroke() 或 fill() 获得线段或填充图形。
使用这个方法可以将方形图片裁剪成圆形绘制到画布上

ctx.arc(X, Y, R, 0, Math.PI * 2);
ctx.clip(); // 剪切路径,这里可以理解为选区,后面的绘制只会在选区内
ctx.drawImage(img, 0, 0, width, height, 0, 0, 2*R, 2*R);
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一:canvas简介 1.1什么是canvas? ①:canvas是HTML5提供的一种新标签 ②:HTML5 ...
    GreenHand1阅读 4,718评论 2 32
  • 一、canvas简介 1.1 什么是canvas?(了解) 是HTML5提供的一种新标签 Canvas是一个矩形区...
    Looog阅读 3,963评论 3 40
  • 第一章 HTML5 (2014年10月29日发布)新特性: 10个 (1)新的语义标签 (2)增强型表单 (3)视...
    fastwe阅读 974评论 0 1
  • canvas元素的基础知识 在页面上放置一个canvas元素,就相当于在页面上放置了一块画布,可以在其中进行图形的...
    oWSQo阅读 10,338评论 0 19
  • 不登山不知山之高,不登山不知山之险。这一日,我是一个朝圣的人。朝圣是一个人前往自己信仰的圣地或其它重要地点的旅程,...
    生活与文艺阅读 3,364评论 0 2