canvas_09 像素文字

效果图:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3     <head>
 4         <meta charset="UTF-8">
 5         <meta http-equiv="X-UA-Compatible" content="IE=edge">
 6         <meta name="viewport" content="width=device-width, initial-scale=1.0">
 7         <title>Canvas</title>
 8         <style>
 9             canvas {
10                 margin: 0 auto;
11                 border: 1px solid #aaa;
12                 display: block;
13             }
14         </style>
15     </head>
16     <body>
17         <canvas width="500px" height="500px" id="canvas"></canvas>
18 
19         <script>
20             var canvas = document.querySelector("#canvas");
21             var ctx = canvas.getContext("2d");
22 
23             /*
24                 ctx.getImageData(x, y, width, height) 返回数组
25                 R - 红色 (0 - 255)
26                 G - 绿色 (0 - 255)
27                 B - 蓝色 (0 - 255)
28                 A - alpha (0 - 255)   0 透明,255不透明
29                 
30                 var img = new Image();
31                 img.src = "./1.jpeg";
32                 img.onload = () => {
33                     ctx.drawImage(img, 0, 0, 200, 200);
34                     var copy = ctx.getImageData(40, 20, 50, 50);
35                     ctx.putImageData(copy, 0, 300);
36                 };
37             */
38 
39             var w = canvas.width;
40             var h = canvas.height;
41 
42             function drawCircle(x, y, r, color) {
43                 ctx.beginPath();
44                 ctx.arc(x, y, r, 0, Math.PI * 2);
45                 ctx.fillStyle = color || "#000";
46                 ctx.fill();
47             }
48 
49             function drawText(text, x, y) {
50                 ctx.font = "300px 微软雅黑";
51                 ctx.textAlign = "center";
52                 ctx.textBaseline = "middle";
53                 ctx.fillText(text, x, y, w);
54             }
55 
56             // step_01 画文字
57             drawText("", w / 2, h / 2);
58 
59             // step_02 获取像素点
60             var copy = ctx.getImageData(0, 0, w, h);
61 
62             // step_03 清除画布
63             ctx.clearRect(0, 0, w, h);
64 
65             // step_04 筛选有效像素点
66             var leap = 3;
67             for (var y = 0; y < h; y += leap) {
68                 for (var x = 0; x < w; x += leap) {
69                     var index = x + y * w; // 公式
70                     var a = copy.data[index * 4 + 3];
71                     if (a > 128) {
72                         // step_05 画圆
73                         drawCircle(x, y, 1, "#f00")
74                     }
75                 }
76             }
77         </script>
78     </body>
79 
80 </html>
原文地址:https://www.cnblogs.com/luwei0915/p/15734754.html