erikvdven/php-gif

v1.0.1 2016-03-15 15:47 UTC

This package is not auto-updated.

Last update: 2024-09-14 19:25:27 UTC


README

Latest Stable Version Donate

重要提示: 此存储库已不再积极维护。我多年前从 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 安装

  1. 获取 Composer
  2. 使用 composer require erikvdven/php-gif 安装 php-gif
  3. 将以下内容添加到您的应用程序的主要 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 类的少量修改。