erikvdven / php-gif
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-14 19:25:27 UTC
README
重要提示: 此存储库已不再积极维护。我多年前从 PHP 转到了 Python,这就是原因。如果您想为此存储库做出贡献,请随时提交 PR,也许我可以添加您作为贡献者。还有人在此存储库的基础上进行了分支,并在此基础上进行了进一步开发。要查看与 PHP 8 兼容的分支,请参阅 phpgif/phpgif
下面的 GIF 图像是示例图像,它可以包含实时数据。一个 PHP 脚本计算到新年的剩余时间并生成 GIF 图像。适用于向客户发送包含实时数据的电子邮件的理想解决方案。电子邮件客户端提供了通过 URL 加载图像的机会,因此每当客户端重新打开电子邮件消息时,都会用实时数据重新生成 GIF。
不幸的是,对于下面的图像,这不起作用,因为 GitHub 一次下载图像并将其存储在本地。然而,大多数电子邮件客户端都直接从源加载图像。Gmail 和 Outlook 2011 (Mac OSX) 已成功测试。
注意
我收到了一些关于 Gmail 的问题,所以让我们更详细地描述一下这个电子邮件客户端。此脚本在写作时(2015-12-23)已成功测试 Gmail。Gmail 通过其自己的代理加载图像,而不是直接从源加载。关于代理有不同的意见,但看起来谷歌的代理保护您的隐私数据,并仅向发送者通知电子邮件已被打开。有猜测称 Gmail 缓存了图像,但仍然尊重缓存头信息,因此您可以指示 Gmail 多久刷新一次数据。我个人在缓存方面没有任何问题!我已在 Gmail 中多次测试此倒计时图像,当然您也可以自行测试。为了确保安全,我在示例中添加了一些禁用缓存的头信息。
Composer 安装
- 获取 Composer
- 使用
composer require erikvdven/php-gif
安装 php-gif - 将以下内容添加到您的应用程序的主要 PHP 文件中:
require 'vendor/autoload.php';
入门
创建一个 PHP 文件,并在文件的开始处添加这些标题
// Caching disable headers header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // Output as a GIF image header ('Content-type:image/gif'); // Include the GIFGenerator class use ErikvdVen\Gif\GIFGenerator;
在下几行中,您可以通过首先初始化 GIFGenerator 对象并创建一个包含所有图像帧的数组来创建一个 GIF 图像
// Initialize a new GIFGenerator object $gif = new GIFGenerator(); // Create a multidimensional array with all the image frames $imageFrames = array( 'repeat' => false, 'frames' => array( array( 'image' => './images/newyear.jpg', 'text' => array( array( 'text' => 'Hello GIF frame 1', 'fonts-color' => '#000', 'x-position' => 140, 'y-position' => 138 ) ), 'delay' => 100 ), ) );
最后,生成图像并在屏幕上 echo
结果
echo $gif->generate($imageFrames);
示例
更完整的示例。您可以将以下代码复制粘贴到文件中,并在浏览器中执行以查看更完整的结果。如您所见,在您的 GIF 图像中不需要使用文本,您可以添加尽可能多的文本以及尽可能多的帧。
<?php // Caching disable headers header("Cache-Control: no-store, no-cache, must-revalidate, max-age=0"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); // Output as a GIF image header ('Content-type:image/gif'); // Include the GIFGenerator class use ErikvdVen\Gif\GIFGenerator; // Initialize a new GIFGenerator object $gif = new GIFGenerator(); // Create a multidimensional array with all the image frames $imageFrames = array( 'repeat' => 5, 'frames' => array( array( 'image' => './images/newyear.jpg', 'text' => array( array( 'text' => 'Hello GIF frame 1', 'fonts' => './fonts/Lato-Light.ttf', 'fonts-size' => 30, 'angle' => 0, 'fonts-color' => '#000', 'x-position' => 140, 'y-position' => 138 ) ), 'delay' => 100 ), array( 'image' => './images/newyear.jpg', 'text' => array( array( 'text' => 'Hello GIF frame 2', 'fonts' => './fonts/Lato-Light.ttf', 'fonts-size' => 15, 'angle' => 0, 'fonts-color' => '#000', 'x-position' => 140, 'y-position' => 138 ), array( 'text' => 'Hello GIF frame 2', 'fonts' => './fonts/Lato-Light.ttf', 'fonts-size' => 15, 'angle' => 0, 'fonts-color' => '#000', 'x-position' => 140, 'y-position' => 108 ) ), 'delay' => 100 ), array( 'image' => './images/newyear.jpg', 'delay' => 50 ) ) ); echo $gif->generate($imageFrames); ?>
许可 & 声明
本软件根据 MIT 许可证 发布。
GIFEncoder
GIFEncoder.class.php 包含来自 László Zsidi 的 GIFEncoder PHP 类的少量修改。