返回博客

我们如何为 Storybook 构建个人资料卡生成器

结合 React 和 Netlify Functions 构建社交图片生成器

loading
Varun Vachhar
@winkerVSbecks
最后更新

Storybook 是一个重要的 UI 开发工具。在 Github 上有 5.8 万颗星,每月在 NPM 上有 1000 万次下载,每天被成千上万的工程师使用,拥有超过 1200 名贡献者。

我们取得的巨大进展证明了社区的活力。这就是为什么我们每周都会表彰杰出的贡献者,在更新日志中提及他们,并在发布时特别感谢他们。

最近,我们发现如何使用个人资料卡更好地展示社区。我们的 API 会拉取贡献者信息,并为每位贡献者生成一张独一无二的定制图片。它结合了 React、创意编程和 Netlify Functions。这篇博文将向您展示如何为您的项目构建类似的东西。

特别鸣谢

Storybook 是一个社区驱动的项目。我们感谢从讨论、文档、错误修复到功能改进等各种形式的贡献。我们通过在 Twitter 上特别感谢他们来强调这些贡献并说“谢谢!”。这能让他们的工作获得更多可见性,并增加他们的关注者。

我想把这个提升一个层次 ✨

每次特别鸣谢都附带一张个人资料卡,其中包含感谢信息、个人头像和轮廓背景。每个背景都是独一无二的,并从用户名生成。怎么做到的?稍后详细介绍。首先,让我们谈谈整体架构。

使用 Netlify Functions 生成图片

这一切都由一个图片生成 API 驱动。个人资料卡生成器被实现为一个 React 组件。Netlify Function 处理请求,使用 Playwright 启动一个无头浏览器来截图 DOM 📸,并返回一张图片。

Cloudinary 用作图片生成 Function 的写入缓存。这意味着您只需生成一次图片,后续请求将立即返回。

这项设置的大部分内容基于 Chris Biscardi 出色的构建 OpenGraph 图片生成 API 课程。

创意编程轮廓

使用无头浏览器的好处在于我可以使用 HTML 和 CSS 来创建布局。并使用 SVG 创建轮廓背景。这是一个动态生成的 SVG。

轮廓是两种生成艺术概念的结合:噪声和行进平方算法。

噪声

噪声 有点像 Math.random(),但生成的输出更加平滑和自然。

我将画布分割成一个带有 (x,y) 坐标的二维网格。噪声函数为每个坐标返回一个介于 0 和 1 之间的值。输出  看起来像这样

它有什么用?用于生成看起来自然的纹理,如云彩和风景。哦,还能赢得一个奥斯卡 🏆

在我的例子中,我将它用作轮廓的源数据。

行进平方 🥁

与噪声函数返回相同值的所有点都将在轮廓线上,[行进平方算法](https://thecodingtrain.com/challenges/coding-in-the-cabana/005-marching-squares.html?ref=storybookblog.ghost.io) 为二维标量场的等值线生成近似值。换句话说,它会创建线,线上所有点的噪声函数值都相同。

MarchingSquares.js 是该算法的一个 JavaScript 实现。您给它一个二维噪声数据数组,它会为您计算等值带。输出是一个路径数组。其中每条路径是一个 [x, y] 坐标数组。

SVG 轮廓

canvas-sketch-util 是一个用于在浏览器中进行创意编程的出色实用库。它提供了噪声函数和 pathsToSVGPaths 函数。我用后者将等值带转换为 SVGs。

现在,轮到您了!

我们的 Storybook 中查看 ShoutOut 组件。尝试更改用户名,看看它如何影响轮廓。

使用这个一键部署 启动您自己的个人资料卡生成器服务。

通过结合一系列熟悉的 Web 技术,我们能够创造出独特的东西。我希望这能成为您探索的起点。在 Twitter 上与我们联系并分享您的作品。

加入 Storybook 邮件列表

获取最新新闻、更新和版本发布信息

7,180开发者,仍在增加

我们正在招聘!

加入 Storybook 和 Chromatic 背后的团队。构建被数十万开发者用于生产环境的工具。远程优先。

查看职位

热门文章

Storybook for Vue 3

支持下一代渐进式 JS 框架
loading
Michael Shilman

创建 Storybook 插件

推出插件套件和深入指南
loading
Varun Vachhar

管理数据和状态的 Storybook 插件

在隔离环境中构建连接的 UI
loading
Varun Vachhar
加入社区
7,180开发者,仍在增加
为什么为何选择 Storybook组件驱动的 UI
文档指南教程更新日志遥测
社区插件参与其中博客
精选项目探索项目组件词汇表
开源软件
Storybook - Storybook 中文

特别感谢 Netlify CircleCI