自动生成的社交媒体图片

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 $200 免费积分!

我一直都在思考社交媒体图片 再次。 你知道,当你在 Twitter、Facebook 或 iMessage 等地方分享链接时,会显示(可能)的图片。 你实际上是在浪费钱,因为它们可以让一个带有链接的普通帖子变成一个带有醒目图片的帖子,并且有一个巨大的可点击区域。 在网站上的所有图片中,社交媒体图片可能是网站上访问量最大、最令人难忘、网络请求次数最多的图片。

它本质上是这部分 HTML 代码让它们出现

<meta property="og:image" content="/images/social-media-image.jpg" />

但是请务必 阅读相关内容,因为还有很多其他 HTML 标签需要设置正确。

我认为我之所以再次思考这个问题,是因为 GitHub 似乎有新的社交媒体卡片。 这些是新的,对吧?

这些 GitHub 社交媒体图片显然是通过编程生成的。 查看 示例 URL

自动化

虽然我认为你可以从完全手工制作的定制设计社交媒体图片中获得很多好处,但这对于拥有大量页面的网站来说并不实用:博客、电子商务……你懂我的意思。 对于这样的网站,诀窍是通过模板以某种方式自动化它们的创建。 我在 过去 提到过其他人的做法,但让我们回顾一下

你知道所有这些有什么共同点吗? Puppeteer

Puppeteer 是一种启动和控制 Chrome 无头副本的方法。 它有一个 非常有用的功能,可以截取浏览器窗口的截图:await page.screenshot({path: 'screenshot.png'});。 这就是 我们的编码字体网站如何进行截图。 截图的想法让人们开始思考。 为什么不使用 HTML 和 CSS 设计一个社交媒体模板,然后让 Puppeteer 对其进行截图,并将其用作社交媒体图片呢?

我喜欢这个想法,但这意味着必须访问一个 Node 服务器(Puppeteer 运行在 Node 上),该服务器要么一直运行,要么可以作为 无服务器函数 访问。 因此,难怪这个想法引起了 Jamstack 人群的共鸣,他们已经习惯了执行构建过程和利用无服务器函数等操作。

我认为在 URL 中“托管”无服务器函数,并通过 URL 参数传递要包含在截图中的动态值的想法也很聪明。

SVG 路线

我有点喜欢使用 SVG 作为社交媒体图片模板的想法,部分原因是它具有固定坐标,可以在其中进行设计,这与我对创建社交媒体图片所需精确尺寸的思维模式相匹配。 我喜欢 SVG 的可组合性

George Francis 在博客中写道 “创建您自己的生成式 SVG 社交图片”,这是一个非常棒的例子,所有这些都很好地融合在一起,并带有一丝随机性和奇思妙想。 我也喜欢 contenteditable 技巧,这使得它成为一次性截图的实用工具。

我也尝试过动态 SVG 创建:查看我们会议网站上的 这个会议页面

不幸的是,SVG 不是社交媒体图片支持的图片格式。 以下是 Twitter 的具体说明

卡片中要使用的图片的 URL。 图片大小必须小于 5MB。 支持 JPG、PNG、WEBP 和 GIF 格式。 仅使用动画 GIF 的第一帧。 不支持 SVG。

Twitter 文档

尽管如此,在 SVG 中进行组合/模板化仍然很酷。 你可以将其转换为另一种格式以进行最终使用。 拥有 SVG 后,将 SVG 转换为 PNG 非常简单。 就我而言,我使用了 svg2png一个非常小的 Gulp 任务,该任务在构建过程中运行。

WordPress 呢?

我的 WordPress 网站没有构建过程,至少没有每次发布或更新帖子时都会运行的构建过程。 但在(我)的认知中,WordPress 最需要动态社交媒体图片。

并不是说我现在没有这些。 Jetpack 在很大程度上 使其顺利运行。 它将帖子的“特色图片”设为社交媒体图片,允许我预览它,并自动发布到社交网络。 这是我制作的一个关于此的视频。 这将使我达到一个将特色图片附加并良好显示的位置。

但它不会自动化它们的创建。 有时候,单独的定制图形是最好的选择(上面的图形可能就是很好的例子),但可能更常见的情况是,使用一个精心设计的模板卡片是最好的选择。

幸运的是,我从 Daniel Post 那儿了解到 Social Image Generator for WordPress。 看起来多漂亮

这正是 WordPress 所需要的!

Daniel 本人帮助我创建了一个专门针对 CSS-Tricks 的自定义模板。 我曾梦想着可以从众多模板中进行选择,这些模板包含标题、作者、选定的引用、特色图片和其他内容。 到目前为止,我们只确定了两个模板,一个包含标题和作者的模板,另一个包含特色图片、标题和作者的模板。 图片是根据这些元数据动态创建的

太元了。

这不是 Puppeteer。 这甚至不是 PhantomJS 支持的 svgtopng。 这是 PHP 生成的图片! 而且甚至不是 ImageMagick,而是 直接使用 GD,这是 PHP 中内置的功能。 因此,这些图片不是在任何可能让前端开发人员感到舒适的语法中创建的。 你最好使用其中一个模板,但如果你想了解我的自定义模板是如何编码的(由 Daniel 编码),请告诉我,我会将代码发布到公共位置。

结果很不错,对吧?

推文

我知道为什么必须以这种方式构建:它使用的是在 WordPress 可以运行的任何地方都能运行的技术。 这非常符合 WordPress 的精神。 但这确实让我想,如果模板的创建方式更现代化就好了。 就像,如果你的社交媒体图片的模板就像主题根目录下的 social-image.php 一样,就像其他任何模板文件一样,那不是很好吗? 然后,你使用所有正常的 WordPress API 对这个页面进行模板化和设计? 就像一个 ACF 块 吗? 然后它被截取并使用? 我来帮你回答:是的,这会很酷。