一: 应用场景
在一些C端的活动中,我们可能会需要实现一个动态拼字的效果,例如下面这样:
Canvas动态拼字效果视频
3d动态拼字效果视频
二:实现思路:
上面视频中的文本点位信息我们可以通过canvas来获取:
- 将文本绘制在canvas画布上。
- 通过canvas的2d上下文调用getImageData来拿到像素数据。
- 对像素数据进行过滤拿到文本位置的像素信息。
我们在黑色背景的canvas画布上绘制白色的文本,然后循环canvas上的每一个像素,通过像素的颜色值来判断该像素点是属于文本还是背景。
三: 关键代码
1. 简单版:
// 获取canvas的2d上下文
this.canvas = document.getElementById("myCanvas");
this.ctx = this.canvas.getContext("2d");
// 存储文本点位数据
this.textPointData = [];
// 调用getImageData方法获取canvas区域的像素数据
let imgData = this.ctx.getImageData(0, 0, this.canvas.width, this.canvas.height);
let pxl = imgData.data;
// 循环canvas每个像素点,过滤出文字部分的像素信息
for (let i = 0; i < this.canvas.width * this.canvas.height; i++) {
let alphaIndex = i * 4 + 3;
if (pxl[i * 4 + 3] > 0) {
// 根据alpha值获得像素的线性位置。
let linearPosition = alphaIndex / 4;
// 将线性位置除以宽度以得到Y坐标
let y = Math.floor(linearPosition / this.canvas.width);
// 将y坐标乘以宽度,并从线性位置减去整个值以得到X坐标。
let x = linearPosition - (Math.floor(linearPosition / this