
一个纯PHP编写的OpenGraph图像生成器,无需安装其他运行时或整个浏览器实例就能创建动态PNG图像。
The OG完全免费供个人或商业使用。如果它让你的工作变得更轻松,或者你只是想确保它能继续得到支持和改进,我非常感谢你的捐赠!
如果你正在使用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枚举中找到所有这些定义。
背景可以设置为Repeat或Cover,并且还可以设置不透明度:
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::Top和BorderPosition::BottomBorderPosition::Y - 结合了BorderPosition::Left和BorderPosition::Right您可以通过链式调用border()方法并将position参数设置为BorderPosition::None来移除图像的默认边框:
$image = new Image; $image->border(BorderPosition::None);
主题设置您图像的颜色、字体和样式。目前有两种主题可用:Light和Dark。
默认主题是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辅助编程,代码自动修复
Trae是一种自适应的 集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。


AI一键生成PPT,就用博思AIPPT!
博思AIPPT,新一代的AI生成PPT平台,支持智能生成PPT、AI美化PPT、文本&链接生成PPT、导入Word/PDF/Markdown文档生成PPT等,内置海量精美PPT模板,涵盖商务、教育、科技等不同风格,同时针对每个页面提供多种版式,一键自适应切换,完美适配各种办公场景。


AI赋能电商视觉革命,一站式智能商拍平台
潮际好麦深耕服装行业,是国内AI试衣效果最好的软件。使用先进AIGC能力为电商卖家批量提供优质的、低成本的商拍图。合作品牌有Shein、Lazada、安踏、百丽等65个国内外头部品牌,以及国内10万+淘宝、天猫、京东等主流平台的品牌商家,为卖家节省将近85%的出图成本,提升约3倍出图效率,让品牌能够快速上架。


企业专属的AI法律顾问
iTerms是法大大集团旗下法律子品牌,基于最先进的大语言模型(LLM)、专业的法律知识库和强大的智能体架构,帮助企业扫清合规障碍,筑牢风控防线,成为您企业专属的AI法律顾问。


稳定高效的流量提升解决方案,助力品牌曝光
稳定高效的流量提升解决方案,助力品牌曝光


最新版Sora2模型免费使用,一键生成无水印视频
最新版Sora2模型免费使用,一键生成无水印视频


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


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


最强AI数据分析助手
小浣熊家族Raccoon,您的AI智能助手,致力于通过先进的人工智能技术,为用户提供高效、便捷的智能服务。无论是日常咨询还是专业问题解答,小浣熊都能以快速、准确的响应满足您的需求,让您的生活更加智能便捷。


像人一样思考的AI智能体
imini 是一款超级AI智能体,能根据人类指令,自主思考、自主完成、并且交付结果的AI智能体。
最新AI工具、AI资讯
独家AI资源、AI项目落地

微信扫一扫关注公众号