canvas绘制清晰的方法

很早就开始使用canvas,包括自己绘制各种图形,以及作为画布提供给诸如echarts,当canvas绘制细线条,特别是关于文字绘制会出现很模糊或者锯齿的感觉。

1 <canvas ref="canvas" width="200" height="200"/>

正常情况下一般都是这么写的,但是实际上对于canvas来说,这个canvas.width canvas.height 与canvas.style.width canvas.style.height不一样。

在标签中作为props输入的高和宽指的是画布大小,而css给#canvas指定的高宽则是实际尺寸,所以我们就可以放大画布,然后让实际尺寸小于画布尺寸即可,这样相当于图片缩小,清晰度会相应的提高

<canvas ref="canvas" style={{width:200,height:200}} width="400" height="400"/>

比如这样,就相当于先绘制了一个400*400的画布,然后缩放到200*200的空间上,但是同时绘制的所有坐标需要根据缩放的比例进行相对应的计算,包括文字输入的字体大小

效果如下图所示,

根据代码一得到的结果不够清晰,而代码二的结果和HTML文字输入相差无几

ps:圆环百分比绘制代码

 1         let canvas = this.refs.canvas;
 2         let context = canvas.getContext(‘2d‘);
 3         let centerX = canvas.width/2;
 4         let centerY = canvas.height/2;
 5         let rad = Math.PI*2/100;
 6         let endNum = this.props.param[1] * 100;
 7         let scale = 2;
 8         //context.mozImageSmoothingEnabled = true;
 9         //context.webkitImageSmoothingEnabled = true;
10         //context.msImageSmoothingEnabled = true;
11         context.imageSmoothingEnabled = true;
12         //context.webkitFontSmoothing = true;
13         context.clearRect(0, 0, canvas.width, canvas.height);
14         context.save();
15         context.strokeStyle = "#53FFFF"; //设置描边样式
16         context.lineWidth = 4*scale; //设置线宽
17         context.beginPath(); //路径开始
18         context.arc(centerX, centerY, 75*scale , -Math.PI/2, -Math.PI/2 +endNum*rad, false); //用于绘制圆弧context.arc(x坐标,y坐标,半径,起始角度,终止角度,顺时针/逆时针)
19         context.stroke(); //绘制
20         context.closePath(); //路径结束
21         context.restore();
22         context.save();
23         context.beginPath();
24         context.strokeStyle = "white";
25         context.lineWidth = 2*scale;
26         context.arc(centerX, centerY, 75*scale , 0, Math.PI*2, false);
27         context.stroke();
28         context.closePath();
29         context.restore();
30         context.save(); //save和restore可以保证样式属性只运用于该段canvas元素
31         context.strokeStyle = "#fff"; //设置描边样式
32         //绘制字体,并且指定位置
33         context.fillStyle = "#fff";
34         context.font = "normal normal lighter 24px Microsoft YaHei"; //设置字体大小和字体
35         context.fillText("击败了全部用户", centerX-40*scale, centerY-20*scale);
36         context.font = "normal normal normal 60px arial";
37         context.fillText(endNum.toFixed(0)+"%", centerX-23*scale, centerY+15*scale);
38         context.font = "normal normal lighter 28px Microsoft YaHei"; //设置字体大小和字体
39         context.fillText(this.props.judge+‘‘, centerX-15*scale, centerY+40*scale);
40         context.stroke(); //执行绘制
41         context.restore();

时间: 2024-10-25 06:57:57

canvas绘制清晰的方法的相关文章

如何使用canvas绘制椭圆,扩展非chrome浏览器中的ellipse方法

这篇博文主要针对浏览器中绘制椭圆的方法扩展.在网上搜索了很多,发现他们绘制椭圆的方式都有缺陷.其中有压缩法,计算法,贝塞尔曲线法等多种方式.但是都不能很好的绘制出椭圆.所有我就对这个绘制椭圆的方式进行了研究,发现压缩法是可以完美实现椭圆绘制的.废话不多说,直接上代码了. 1 if (!CanvasRenderingContext2D.prototype.ellipse) { 2 CanvasRenderingContext2D.prototype.ellipse = function(x, y,

H5 canvas绘制出现模糊的问题

在之前做移动端小游戏幸运转盘.九宫格转盘,使用到了 canvas ,也是第一次在项目中使用 canvas 来实现. 近期测试人员反应 canvas 绘制的内容太模糊,心想着用 canvas 绘制出来的怎么会模糊,先前也有考虑到适配不同尺寸的移动设备,担心直接使用 img 或者设置 background 会使图片拉伸而变得模糊,所以使用 canvas 来绘制转盘与九宫格,精确的计算每个物体所在的坐标以及尺寸绘制出来的,怎么会模糊. 然而将绘制的内容与页面中的其他文字或者图片作对比后,发现使用 ca

封装 用canvas绘制直线的函数--面向对象

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>用面向对象的思想 封装 在canvas绘制直线的函数</title> 6 </head> 7 <body> 8 <canvas id="cv"></canvas> 9 &

canvas绘制时钟

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>canvas绘制钟表</title> <style type="text/css"> #canvas{ /*border: 2px solid red;*/ display: block; margin: 0 auto; } </style> </

html5 Canvas绘制图形入门详解

html5,这个应该就不需要多作介绍了,只要是开发人员应该都不会陌生.html5是「新兴」的网页技术标准,目前,除IE8及其以下版本的IE浏览器之外,几乎所有主流浏览器(FireFox.Chrome.Opera.Safari.IE9+)都已经开始支持html5了.除此之外,在移动浏览器市场上,众多的移动浏览器也纷纷展开关于「html5的支持能力以及性能表现」的军备竞赛.html作为革命性的网页技术标准,再加上众多浏览器厂商或组织的鼎力支持,可以想见,html5将会成为未来网页技术的领头羊. ht

使用Canvas绘制图形的基本教程

原文地址:http://www.cnblogs.com/picaso/archive/2012/11/26/2789077.html HTML5火的正热,最近有个想法也是要用到HTML的相关功能,所以也要好好学习一把. 好好看了一下Canvas的功能,感觉HTML5在客户端交互的功能性越来越强了,今天看了一下Canvas绘图,下边是几个实例,记下以备后用. 1.使用Canvas绘制直线: <!doctype html> <html> <head> <meta ch

HTML5 Canvas绘制环形进度条

最近比较迷恋canvas,加之做了一个个人网站,有用到环形进度条,记录下来. canvas中没有直接绘制圆的方法,但有一个绘制弧线的context.arc方法, 下面讲下用该方法如何绘制出图片效果. arc()方法介绍 context.arc(x,y,r,sAngle,eAngle,counterclockwise); 参数说明: x: 圆的中心的 x 坐标 y: 圆的中心的 y 坐标 r: 圆的半径 sAngle: 起始角,以弧度计.(弧的圆形的三点钟位置是 0 度) eAngle: 结束角,

canvas的两个方法说明

今天在用canvas的时候,发现有两个方法比较陌生,在此记录详细说明一下. (1)文本绘制的一个方法 canvas.drawTextOnPath(text, path, hOffset, vOffset, paint) 参数说明:text是所绘制的文本 path是所绘制文本遵循的路径 hOffset是沿路径方向上的偏移量 vOffset是与路径方向垂直的那个方向上的偏移量 paint是画笔 为了彻底说明hOffset和vOffset的意思,你可以看下图: 红色箭头为文本绘制方向,那么hOffse

HTML5 canvas 绘制精美的图形

HTML5 是一个新兴标准,它正在以越来越快的速度替代久经考验的 HTML4.HTML5 是一个 W3C “工作草案” — 意味着它仍然处于开发阶段 — 它包含丰富的元素和属性,它们都支持现行的 HTML 4.01 版本规范.它还引入了几个新元素和属性,它们适用许多使用 web 页面的领域 — 音频.视频.图形.数据存储.内容呈现,等等.本文主要关注图形方面的增强:canvas. 新的 HTML5 canvas 是一个原生 HTML 绘图簿,用于 JavaScript 代码,不使用第三方工具.跨