CanvasKit & opentype.js 实现文字阴影

这次的主角其实不是 CanvasKit, 而是 opentype.js, 本次目标主要想利用它获取文本的 Path.

当然获取 Path 不止这一种, 还有个 gero3/facetype.js. 不过官方介绍它生成的路径主要为了 Threejs, 我自己也看不明它生成的字体路径在 Threejs 之外应该怎么用.

opentype.js

opentype.js is an OpenType and TrueType font parser and writer. It allows you to access the letterforms of text from the browser or node.js.

我们可以利用它对文字字形 Glyph 做更细致的操作, 修改字符的形态等. 当然这一切都是建立在 opentype.js 能获取到一个字体字符的 Path 的基础上, 并且支持多语言.

opentype.js 的 Font 对象下有这样的方法 Font.getPath(text, x, y, fontSize, options)

得到 path 后就可以塞入到 canvaskit.js 中操作了.

opentype.js 的 Path 同样提供了 getBoundingBox() 方法

canvaskit.js

我们的目标是给文字加上阴影, 也就是要做一个探照灯的效果.

在配合 CanvasKit 的过程中, 唯一要注意的是处理原始 Path 的 transform.

通过 svg-path-visualizer.netlify.app 可以看到文字顶部 Y 值是负数

上一篇介绍了 CanvasKit 中 Paint 用法, 本篇就说明一下 CanvasKit 中滤镜 Mask 来实现模糊.

和标准 Canvas API 不同的是, CanvasKit 在模糊和非模糊效果之间切换不需要 save restore 来保存状态. 因为 Mask 是作用在 Paint 上, 当不用 Mask 时取消滤镜即可.

很容易在 Skia 仓库中找到相关例子

>>> Github

相关推荐
Wect9 分钟前
React 性能优化精讲
前端·react.js·性能优化
追风筝的人er43 分钟前
SpringBoot+Vue3 企业考勤如何处理法定假期?节假日方案、调休补班与工作日判断链路拆解
前端·vue.js·后端
无敌的黑星星1 小时前
Java8 CompletableFuture 实战指南
linux·前端·python
雁鸣零落1 小时前
如何在 Chrome 中查看其他浏览器的书签?书签空间订阅与侧边栏只读切换指南
前端·chrome·edge浏览器
hpoenixf2 小时前
一天上线 + 零返工:我如何给复杂前端需求建立“安全感”
前端
广州华水科技2 小时前
单北斗GNSS变形监测系统在水利工程安全保障中的应用与优势分析
前端
yqcoder2 小时前
CSS 外边距重叠(Margin Collapsing):现象、原理与完美解决方案
前端·css
山楂树の3 小时前
图像标注大坑:img图片 + Canvas 叠加标注,同步放大后标注位置偏移、对不齐?详解修复方案及亚像素处理原理
前端·css·学习·canva可画
本山德彪3 小时前
我做了一个拼豆图纸生成器,把照片秒变图纸
前端
DTrader4 小时前
用TS无法实盘量化? - 实盘均线策略
前端·api