borodin-vasiliy/php-stories

PHP 库,用于使用图片、文本和动画创建故事。使用 GD 库。

1.2 2019-01-13 14:39 UTC

This package is auto-updated.

Last update: 2024-09-14 02:50:25 UTC


README

PHP 库,用于使用图片、文本和动画创建视频故事(MP4)。依赖于 GD 库。此库通过逐帧创建故事,然后使用 ffmpeg 创建视频。请确保您的服务器上已安装 ffmpeg!

快速开始

使用 composer 安装库

composer require borodin-vasiliy/php-stories

示例

在 examples 目录中,您可以找到两个使用此库的示例,以下我将展示如何创建故事。

创建库对象

<?php

use BorodinVasiliy\Stories;

$stories = new Stories([
        "width" => $stories_width,
        "height" => $stories_height,
        "duration" => $stories_duration
    ]);

?>

如你所见,库的参数是包含一些参数的数组。你可以使用哪些参数

  • "width" - 故事布局的宽度,以像素为单位
  • "height" - 故事布局的高度,以像素为单位
  • "duration" - 故事的持续时间,以秒为单位
  • "fps" - 每秒帧数 - 对于每秒的视频将创建多少帧

所有参数都不是必需的。如果没有设置,则库将使用默认值 720x1280 像素,5 秒,30 fps。

现在,您未来的故事已经准备好添加一些元素到视频中。目前,您可以添加图片、文本、带动画的矩形和椭圆。

向故事中添加对象

库有用于添加每种类型对象的函数。每次方法的参数 - 参数数组。所有对象类型都有通用参数

  • "top" - 从顶部开始的位置
  • "left" - 从左侧开始的位置
  • "opacity" - 类似于 CSS 不透明度 - 元素的不透明度 [0 .. 1]
  • "rotate" - 元素的旋转 [0 .. 359]
  • "z-index" - 类似于 CSS z-index - 首先添加具有较低 z-index 的元素
  • "start" - 元素添加到视频的时间,以秒为单位
  • "end" - 元素应从视频中移除的时间,以秒为单位

并且对象有针对此类型的附加参数。让我们学习如何将每种类型的对象添加到视频中以及我们可以使用哪些参数。

向故事中添加图片

<?php

$stories->addImage([
    "path" => __DIR__."image/cat.jpg",
    /*params*/
]);

?>

图片的附加参数

  • "path" - 必需的 - 包含路径和文件名的图片路径,例如 DIR."image/cat.jpg"
  • "scale" - 1(默认)- 元素的缩放比例,我们没有宽度和高度参数,只有缩放

向故事中添加文本

<?php

$stories->addText([
    "text" => "Hello world!",
    "path" => __DIR__."/fonts/helvetica.ttf",
    "size" => 130,
    /*other params*/
]);

?>

文本的附加参数

  • "text" - 必需的 - 要添加的文本
  • "path" - 必需的 - .ttf 字体文件的路径
  • "size" - 必需的 - 类似于 CSS 字体大小
  • "color" - 类似于 CSS 颜色,例如 "#ffffff"
  • "width" - 可选的,如果您使用此参数,则文本将自动按设置宽度分行
  • "align" - 类似于 CSS 对齐 [左,居中,右]
  • "shadow" - 参数数组,如果您设置它们,则此文本将具有阴影
    • "color" - 阴影颜色
    • "top" - 从主文本的偏移量
    • "left" - 从主文本的偏移量

向故事中添加矩形

<?php

$stories->addRectangle([
    "width" => 100,
    "height" => 100,
    /*other params*/
]);

?>

矩形的附加参数

  • width - 必需的 - 此矩形的宽度
  • height - 必需的 - 此矩形的高度
  • color - 类似于 CSS 颜色

向故事中添加椭圆

<?php

$stories->addEllipse([
    "width" => 100,
    "height" => 100,
    /*other params*/
]);

?>

椭圆的附加参数

  • width - 必需的 - 此椭圆的宽度
  • height - 必需的 - 此椭圆的高度
  • 颜色 - 类似于此椭圆的CSS颜色

动画

视频中的每个对象都可以进行动画处理。动画是通过将一些参数从起始值改变到动画值来实现的。动画的数量没有限制。每个动画都有自己的持续时间。持续时间可以小于此元素的生存时间。当动画完成后,动画参数将被设置为最终点。

所有类型的对象都有通用的动画参数

  • "start" - 动画应该开始的时间(秒)
  • "duration" - 动画持续时间(您可以设置“duration”,也可以设置“end”参数)
  • "end" - 动画应该结束的时间(秒)
  • "top" - 移动此对象到哪个位置
  • "left" - 移动此对象到哪个位置
  • "opacity" - 移动此对象到哪个透明度
  • "rotate" - 旋转此元素的度数

以及附加的(仅适用于此类型)

  • "scale" - 用于图像
  • "width" - 用于矩形和椭圆
  • "height" - 用于矩形和椭圆

此库使用Fluent接口。这意味着,您添加元素后,可以为此元素添加动画

<?php

$stories->addImage([
        /* image params */
    ])->addAnimation([
        /* params for animation */
    ]);

?>

生成故事

当您将所有元素添加到您的故事中并设置动画后,您就可以生成动画和结果视频了。

<?php

$file_hash = $stories->generate(__DIR__."/tmp");

?>

作为函数的参数 - 临时目录的路径,其中将保存帧和结果视频文件(MP4)。方法generate()的结果将为您提供临时目录中结果视频的文件名。生成的帧将自动删除。

故事示例

https://github.com/borodin-vasiliy/php-stories/tree/master/examples/stories/tmp/9b2a0d77f24779937e78f749329630ac.mp4