HTML5画布Canvas文本填充、线段属性、裁剪、透明度与像素合并方式

来源:互联网 发布:windows 确认证书 编辑:程序博客网 时间:2024/05/16 02:27

CSS3中的很多都可以类比与我们canvas的一些属性
canvas中“画笔”环境对象的很多属性都可以类比CSS3中的属性
我们不仅仅可以绘制图形,还可以向画布中添加文字

文字填充

同样先获取元素对象与环境对象

<canvas id="myCanvas" width=500 height=500></canvas>
var canvas = document.getElementById('myCanvas'),    ctx = canvas.getContext('2d');

font用于设置字体属性
fillText设置实体文字与位置
strokeText设置空心文字与位置

ctx.fillStyle = 'red';ctx.font = '50px sans-serif';ctx.fillText('hello world!', 100, 100);

font可以参考css的font属性
默认值’10px sans-serif’


还有一个测量文字宽度的方法了解即可
measureText()

console.log(ctx.measureText('hello world!').width);

线段属性

线段覆盖

lineCap()用于设置线段覆盖属性
有三个值,butt/square/round

ctx.lineCap = 'butt'; //默认ctx.lineWidth = 50;ctx.moveTo(100, 100);ctx.lineTo(400, 100);ctx.stroke();ctx.beginPath();ctx.lineCap = 'square';ctx.lineWidth = 50;ctx.moveTo(100, 200);ctx.lineTo(400, 200);ctx.stroke();ctx.beginPath();ctx.lineCap = 'round';ctx.lineWidth = 50;ctx.moveTo(100, 300);   ctx.lineTo(400, 300);ctx.stroke();

图片中的灰色线条是我添加的
这样就能够看出三个值得区别

线段接合

lineJoin()定义了线段接合的行为
同样有三个值,miter/round/bevel

ctx.lineWidth = 40;ctx.lineJoin = 'miter'; //默认ctx.moveTo(100, 100);ctx.lineTo(400, 400);ctx.lineTo(100, 400);ctx.closePath();ctx.stroke();


ctx.lineWidth = 40;ctx.lineJoin = 'round'; //改ctx.moveTo(100, 100);ctx.lineTo(400, 400);ctx.lineTo(100, 400);ctx.closePath();ctx.stroke();


ctx.lineWidth = 40;ctx.lineJoin = 'bevel'; //改ctx.moveTo(100, 100);ctx.lineTo(400, 400);ctx.lineTo(100, 400);ctx.closePath();ctx.stroke();


当我们使用默认的miter时
当两条线段角度很小的时候
“尖”会越来越大

当它“尖”到一定程度时,默认值就会变成bever

我们可以设置突破这个限制,使用miterLimit
这样改变默认值的长度就会被我们设置为limit*lineWidth/2
了解就好

ctx.miterLimit = 30;

裁剪

clip属性表示当前路径外的区域不再绘制
就相当于把当前这块区域从画布上裁剪下来

ctx.arc(250, 250, 100, 0, Math.PI*2, 0);ctx.clip();ctx.fillRect(0, 0, 500, 500);

这里我把画布截成了一个圆
这样填充矩形时就只能填充到这个“圆形画布”里了

透明度

使用globalAlpha可以设置全局透明度
这个非常简单就不多解释了

ctx.globalAlpha = 0.4;ctx.fillRect(100, 100, 300, 300);

像素合并

globalCompositeOperation用于设置
新图形像素与旧图形像素的合并方式
它有11个值
常见的有3个,source-over(默认)/destination-over/copy
souce-over是后绘制图形覆盖到先绘制图形的上面
destination-over是先绘制图形在后绘制图形的上面
copy是只显示后绘制图形(先绘制图形消失)
其他值理论上是这样的(不同浏览器实现程度或方式不同)

ctx.fillStyle = 'blue';ctx.fillRect(100, 100, 200, 200);ctx.globalCompositeOperation = 'source-over';ctx.fillStyle = 'red';ctx.arc(300, 300, 100, 0 ,Math.PI*2, 0);ctx.fill();

下面我给出我在最新版chrome测试的11个值供大家参考

source-over:

destination-over:

copy:

lighter:

xor:

source-atop:

destination-atop:

source-in:

destination-in:

source-out:

destination-out:


==主页传送门==

5 1
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 大理市民卡丢了怎么办 市民卡内的钱怎么办 宝付支付乱扣款怎么办 苏宁任性贷逾期怎么办 第二次跟家里开口要钱还网贷怎么办 网贷到家来要钱怎么办 网贷贷不了啦急要钱怎么办 百度推广竞价关键词太长怎么办 药店位置差客流少怎么办 网站上的用词违规怎么办 苹果16g内存不够怎么办 手机16g内存不够怎么办 在私企年纪大了怎么办 谷歌浏览器显示不安全打不开怎么办 4s密码多次错误怎么办 苹果4s手机系统错误怎么办 汽车充电口坏了怎么办 如果手机充不了电怎么办 淘宝买的家电坏了怎么办 衣服皱了没有熨斗怎么办 油烟机油盒坏了怎么办 实体店不给换货怎么办 台式电脑鼠标不动了怎么办 电脑开机一直长鸣报警怎么办 国外电话卡网速太慢怎么办 滴滴提现忘记登录密码怎么办 微信提现支付密码忘记了怎么办 小米手机前置摄像头打不开怎么办 mp4视频屏幕好小怎么办 投了简历没回应怎么办 借壳上市原股票怎么办 红米note3指纹解锁失灵怎么办 来分期刷脸失败怎么办 买到假货商家不承认怎么办 买到假货翻新货工商局怎么办 三星note8笔丢了怎么办 夜跑结束后该怎么办 lol客户端正在运行中怎么办 瑞和宝终端锁定怎么办 骊爽摩托车动力弱怎么办? 换了手机跟点微信怎么办