Project Icon

the-og

PHP驱动的OpenGraph图像生成器

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

构建状态 最新稳定版本 总下载量 许可证

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以了解更多详情。

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号