the-og

the-og

PHP驱动的OpenGraph图像生成器

The OG是一款纯PHP编写的OpenGraph图像生成器,无需额外运行时环境。它提供简洁API,支持自定义主题、布局和背景,灵活配置图像内容和样式。支持多种图像格式,易于集成到PHP项目中,适用于生成动态社交媒体分享图片。

OpenGraph图像生成器PHP动态PNG开源项目Github

<p class="text-center"> <a href="https://github.com/simonhamp/the-og/actions"><img src="https://img.shields.io/github/actions/workflow/status/simonhamp/the-og/run-tests.yml?style=for-the-badge&label=tests" alt="构建状态"></a> <a href="https://github.com/simonhamp/the-og/releases"><img src="https://img.shields.io/packagist/v/simonhamp/the-og?style=for-the-badge&label=latest" alt="最新稳定版本"></a> <a href="https://packagist.org/packages/simonhamp/the-og/stats"><img src="https://img.shields.io/packagist/dt/simonhamp/the-og?style=for-the-badge&label=installs" alt="总下载量"></a> <a href="https://github.com/simonhamp/the-og/blob/main/LICENSE"><img src="https://img.shields.io/packagist/l/simonhamp/the-og?style=for-the-badge&label=license" alt="许可证"></a> </p>

The OG

一个纯PHP编写的OpenGraph图像生成器,无需安装其他运行时或整个浏览器实例就能创建动态PNG图像。

赞助

The OG完全免费供个人或商业使用。如果它让你的工作变得更轻松,或者你只是想确保它能继续得到支持和改进,我非常感谢你的捐赠!

立即通过GitHub赞助商捐赠

如果你正在使用The OG,我很想看到你的创作!请给我发送推文/嘟文 (@simonhamp@simonhamp@phpc.social) 附上一些链接,让我看看你在实际中是如何使用The OG的。

谢谢 🙏

赞助商

Laradir - 将最优秀的Laravel开发者与最优秀的Laravel团队连接起来

quantumweb - 一家裸机网络代理。更少的层级,更好的结果

安装

通过Composer安装:

composer require simonhamp/the-og

使用方法

使用The OG非常简单。这里有一个基本示例:

use SimonHamp\TheOg\Background; use SimonHamp\TheOg\Image; (new Image()) ->accentColor('#cc0000') ->border() ->url('https://example.com/blog/some-blog-post-url') ->title('一些博客文章标题,很大而且很长') ->description(<<<'TEXT' 一些稍小但可能更长的副文本。它可能非常长,所以我们可能需要在很多词之后完全截断它。 一些稍小但可能更长的副文本。它可能非常长,所以我们可能需要在很多词之后完全截断它。 TEXT) ->background(Background::JustWaves, 0.2) ->save(__DIR__.'/test.png');

这是生成的图像:

Image提供了一个优雅且流畅的API,用于配置图像的内容、样式和布局,以及渲染图像和将其保存到文件的辅助方法。

检查你的图像

想看看你的图像在社交媒体上分享时的效果如何吗?查看SEOToolkit的社交分享预览

存储图像

方便地,你可以使用save()方法将图像存储在本地文件系统中:

$image = new Image; $image->save('/path/to/your/image.png');

如果你更喜欢将图像存储在本地文件系统以外的地方(例如存储在Amazon S3上),你可以使用toString()方法。

toString()将返回渲染后的图像作为二进制字符串:

$image = (new Image())->toString(); // $service这里可能是一个AWS\S3\S3Client实例,例如 $service->putObject([ 'Key' => 'example-image.png', 'Body' => $image, 'ContentType' => 'image/png', ]);

这将直接将原始二进制数据发送到外部服务,无需先将图像写入本地磁盘文件。

图像格式

默认情况下,The OG以PNG格式编码图像。

但是,如果你希望使用不同的格式,你可以!只需将相关的 intervention/image编码器 实例传递给save()toString()方法:

use Intervention\Image\Encoders\WebpEncoder; $image->toString(encoder: new WebpEncoder);

颜色

在The OG中,颜色可以用十六进制代码、rgba或HTML命名颜色表示。

背景

The OG带有一些内置的背景模式,你可以用它们为你的图像添加一些纹理。你可以在Background枚举中找到所有这些定义。

背景可以设置为RepeatCover,并且还可以设置不透明度:

use SimonHamp\TheOg\Background; use SimonHamp\TheOg\BackgroundPlacement; (new Image)->background( background: Background::JustWaves, opacity: 0.5, placement: BackgroundPlacement::Cover );

它还支持从本地或远程源使用自定义背景图片。 请参阅下面的自定义背景图片部分。

边框

边框通过在图像的一个或多个边缘添加一条单色带来为您的图像提供微妙的颜色和纹理变化——通常使用主题的accentColor

边框通常定义为主题的一部分,但您可以在图像本身上覆盖边框位置、颜色和大小:

use SimonHamp\TheOg\BorderPosition; $image = new Image; $image->border(BorderPosition::Top, 'pink', 10);

可用的边框位置有:

  • BorderPosition::All - 四个边缘都将有边框
  • BorderPosition::Bottom - 底部边缘将有边框
  • BorderPosition::Left - 左侧边缘将有边框
  • BorderPosition::Right - 右侧边缘将有边框
  • BorderPosition::None - 没有边缘会有边框
  • BorderPosition::Top - 顶部边缘将有边框
  • BorderPosition::X - 结合了BorderPosition::TopBorderPosition::Bottom
  • BorderPosition::Y - 结合了BorderPosition::LeftBorderPosition::Right

移除默认边框

您可以通过链式调用border()方法并将position参数设置为BorderPosition::None来移除图像的默认边框:

$image = new Image; $image->border(BorderPosition::None);

主题

主题设置您图像的颜色、字体和样式。目前有两种主题可用:LightDark

默认主题是Light

您可以在渲染之前的任何时候为图像设置主题:

use SimonHamp\TheOg\Theme; $image = new Image; $image->theme(Theme::Dark);

创建主题

主题是实现Theme接口的简单类。

但是,您可以通过简单地实例化Theme来最轻松地创建自己的主题:

use SimonHamp\TheOg\Theme\Fonts\Inter; use SimonHamp\TheOg\Theme\Theme; $theme = new Theme( accentColor: '#247BA0', backgroundColor: '#ECEBE4', baseColor: '#153B50', baseFont: Inter::bold(), callToActionBackgroundColor: '#153B50', callToActionColor: '#ECEBE4', descriptionColor: '#429EA6', descriptionFont: Inter::light(), titleFont: Inter::black(), ); $image = new Image; $image->theme($theme);

字体

目前有2种字体可用(每种有4个变体):

如果您认为某种特定字体应该添加到这个包的核心中,请考虑贡献并打开一个拉取请求。

自定义字体

您可以通过创建一个实现Font接口的类来加载自定义字体:

use SimonHamp\TheOg\Interfaces\Font; class CustomFont implements Font { public function path(): string { return '/path/to/your/font/source/file.ttf'; } }

然后您可以在定义主题时加载这个字体:

$font = new CustomFont; $theme = new Theme( baseFont: $font, );

自定义背景图片

如果内置的背景模式不符合您的品味,您可以通过实例化Background来简单地加载自己的背景:

use SimonHamp\TheOg\Theme\Background; $background = new Background('/path/to/your/image.png');

然后您可以将背景传递给您的自定义主题,或直接传递给您的图像:

$theme = new Theme( background: $background, ); $image = (new Image)->theme($theme); // 或者 $image->background($background);

如果您想要更多的背景自定义,您可以创建自己的实现Background接口的背景类。

覆盖主题设置

您可以覆盖一些主题设置,例如强调色、背景和背景色,而无需创建全新的主题。

$image = new Image; $image->backgroundColor('seagreen') ->background($customBackground);

布局

虽然主题管理您图像中使用的_颜色_和_样式_,但布局管理您_图像的大小_以及图像元素(文本块、其他图像等)的_大小_和_位置_,这些元素被称为特征

不同的布局提供不同的特征。

目前有3种布局:

默认布局是Standard

更多布局正在开发中。

创建布局

布局是一些简单的类,具有一些基本设置和features()方法来定义图像的所有特征。

每个布局类必须实现Layout接口

可以参考标准布局或其他内置布局作为示例。

在其中,你会看到布局的基本设置,如画布尺寸、边框大小和位置以及任何内边距。

所有尺寸均以像素为单位。

特征

特征是构成图像的各个元素,如标题、描述、URL等。

所有布局都支持背景(总是首先渲染)和边框(总是最后渲染),因此通常不需要将它们定义为独立的特征。

除此之外,图像的特征完全由布局定义。它们定义的顺序决定了渲染顺序,从而决定了它们的层叠顺序。

可用的内置特征:

  • TextBox 允许你渲染一个受限制的文本块。框的大小用于限制文本;最终框的大小由渲染文本的长度、字体、大小和行高决定。
  • PictureBox 允许你渲染一张图像。

查看内置布局以了解如何使用这些特征并将它们添加到布局中的示例。

定位特征

特征可以绝对定位在画布上的任何位置,或相对于画布上的另一个特征定位。

要使用相对定位,给目标特征一个唯一的名称很有帮助,其他特征在需要引用其最终渲染位置时会使用这个名称。

查看内置布局以了解如何定位特征的示例。

创建特征

所有特征必须实现Box接口

任何特征的关键方法是render()方法,负责在图像上渲染特征。这个方法接收底层Intervention\Image\Image的实例,允许你直接使用Intervention自己的修改器,例如:

use Intervention\Image\Interfaces\ImageInterface; public function render(ImageInterface $image) { $image->drawCircle(10, 10, function ($circle) { $circle->radius(150); $circle->background('lightblue'); $circle->border('b53717', 1); }); }

但是,你应该扩展Box,因为它提供了许多有用的便利,特别是当你想使用相对定位时。

测试

The OG使用PHPUnit进行快照测试

要运行集成测试,你需要安装所有Composer依赖:

composer install

你还需要Node.js(20版或更高版本)并安装NPM依赖:

npm install

完成后,你可以执行测试:

./vendor/bin/phpunit

贡献

我非常感谢并欢迎任何PR来帮助改进这个包!

支持

所有支持都通过GitHub Issues处理。

许可证

MIT许可证(MIT)。请查看LICENSE以了解更多详情。

编辑推荐精选

蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI助手AI工具AI写作工具AI辅助写作蛙蛙写作学术助手办公助手营销助手
Trae

Trae

字节跳动发布的AI编程神器IDE

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

热门AI工具生产力协作转型TraeAI IDE
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

聊天机器人AI助手热门AI工具AI对话
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

热门AI工具AI办公办公工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

模型训练热门AI工具内容创作智能问答AI开发讯飞星火大模型多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

AI助手热门AI工具AI创作AI辅助写作讯飞绘文内容运营个性化文章多平台分发
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多