部署动态生成 OG Image 的 API

部署动态生成 OG Image 的 API

💡 原文中文,约2200字,阅读约需6分钟。
📝

内容提要

文章介绍如何使用 @vercel/og 在 Vercel 上部署动态生成 OG Image 的 API。由于官方服务不支持中文,作者用 Next.js 搭建应用,准备背景图和中文字体,本地调试后部署。免费套餐限制为 1M,需用 font-spider 按标题字符压缩字体。作者后来改为手动生成。

🔎

延伸解读

免费套餐的 1M 限制是核心约束

Vercel 免费套餐的 Edge 应用最大只支持 1M,而最小的中文字体也远超这个体积。这意味着直接上传完整中文字体不可行,必须通过 font-spider 等工具按标题实际用到的字符提取子集,才能把字体压缩到限制以内。背景图也需尽量缩小并转成 base64 以进一步压缩体积。

官方服务不支持中文,自建是替代方案

Vercel 官方提供的 @vercel/og 服务虽然开箱即用,但不支持中文,因此作者用 Next.js 搭建应用并部署到 Vercel,通过 /api/og?title= 参数动态生成图片。文章也提到 Cloudflare Pages 有官方插件,但作者未研究,读者若有需要可自行探索。

作者最终改为手动生成,动态方案并非必需

文章开头即标注 Deprecated,作者后来改为手动生成 OG Image,并使用 cover-paint 工具。对于年更博客这类更新频率极低的场景,动态生成 API 的维护成本可能高于收益。读者在决定是否部署前,应先评估自己的内容更新频率和实际需求。

❓

Q&A

Vercel 官方的 OG Image 生成服务有什么主要缺陷?

Vercel 官方提供的 @vercel/og 服务不支持中文,这是作者自己搭建应用的主要原因。

如何解决 Vercel 免费套餐 1M 大小限制导致中文字体无法使用的问题?

可以使用 font-spider 等工具,仅提取博客标题中用到的字符来压缩字体体积,从而将字体文件减小到 1M 以下。

部署动态 OG Image API 需要准备哪些素材?

需要准备一张 1200x630 分辨率的背景图(建议转换为 base64 以减小体积)和 .ttf 格式的字体文件,并注意字体许可证。

在本地调试动态 OG Image API 的具体步骤是什么?

先 Fork 并克隆仓库,运行 npm install 和 npm run dev,然后在浏览器访问 http://localhost:3000/api/og?title= 即可预览效果。

如何将动态 OG Image API 部署到 Vercel?

在 Vercel 控制台导入 Git 仓库,Framework Preset 选择 Next.js,点击 Deploy 等待部署完成,之后通过“域名 + /api/og?title= + 内容”调用。

作者现在还在使用动态生成的 OG Image 吗?

作者已经改为手动生成 OG Image,使用工具 https://cover.eallion.com,因为博客年更,动态生成不再必要。

🏷️

标签

➡️

继续阅读