tartan/php-gif

v1.0.2 2019-12-10 11:22 UTC

This package is auto-updated.

Last update: 2024-09-08 17:15:18 UTC


README

Latest Stable Version Donate

下面的GIF图像是一个示例图像,它可以包含实时数据。一个PHP脚本计算到新年的剩余时间并生成GIF图像。向客户发送含实时数据的电子邮件的理想解决方案。电子邮件客户端允许您通过URL加载图像,因此每次客户端重新打开电子邮件消息时,GIF都会用实时数据重新生成。

对于下面的图像,这不起作用,遗憾的是,因为GitHub一次下载图像并将其存储在本地。然而,大多数电子邮件客户端都直接从源加载图像。已成功测试Gmail和Outlook 2011(Mac OSX)。

重要提示:Windows版的Outlook 2007、2010和2013将只显示第一帧。提示:将第一帧保持通用,这样GIF图像是否动画无关紧要。

Live countdown to new year

注意

我收到了一些关于Gmail的问题,所以让我们更详细地描述一下这个邮件客户端。此脚本在撰写本文时(2015-12-23)已成功测试。Gmail通过自己的代理加载图像,而不是直接从源加载。关于代理有不同的意见,但似乎Google的代理保护了您的私人数据,并且仅通知发件人电子邮件已被打开。有传言称Gmail缓存了图像,但仍尊重缓存头,因此您可以指示Gmail多长时间刷新一次数据。我个人在这方面没有遇到任何麻烦!我在Gmail中测试了多次倒计时图像,当然您也可以自己测试。为了确保安全,我在示例中添加了一些禁用缓存的头部。

Composer安装

  1. 获取Composer
  2. 使用以下命令安装php-gif:php composer.phar require erikvdven/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;

在下一行中,您可以创建一个GIF图像,首先初始化GIFGenerator对象,并创建一个包含所有图像帧的数组

// 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图像中不需要使用文本,您可以根据需要添加每帧的文本,以及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类的少量修改。