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

相关推荐
Ryan今天学习了吗几秒前
从零开始实现命令式组件ElMessage(附代码)
前端
用户203119660096几秒前
padding和frame在使用中的顺序问题
前端
资深前端外卖员2 分钟前
【nodejs高可用】Nodejs应用安全防范的问题总结
前端·javascript
袁煦丞2 分钟前
高效文件传输工具FastSend:cpolar内网穿透实验室第567个成功挑战
前端·程序员·远程工作
嘻嘻嘻嘻嘻嘻ys6 分钟前
《Spring Boot 3响应式架构实战:R2DBC驱动的高并发数据持久化革命》
前端·后端
滚石_stars7 分钟前
了解 CSS 的 display: inline-flex;
前端
程序员Bears7 分钟前
HTML5 新特性详解:语义化标签、表单与音视频嵌入
前端·html·html5·visual studio code
进取星辰7 分钟前
14、服务端组件:未来魔法预览——React 19 RSC实践
前端·react.js·前端框架
剽悍一小兔13 分钟前
小程序发布后,不能强更的情况下,怎么通知到用户需要去更新?
前端
115432031q13 分钟前
基于SpringBoot+Vue实现的旅游景点预约平台功能十三
java·前端·后端