php处理gif,拆帧,倒放神器-gif-endec

本文涉及的产品
云解析DNS-重点域名监控,免费拨测 20万次(价值200元)
简介: php处理gif,拆帧,倒放神器-gif-endec

gif-endec

接下来就介绍下这个开源项目:gif-endec

地址:https://github.com/stil/gif-endec

可通过composer安装

composer require stil/gif-endec

实现gif倒放很简单,以第一张图举例:

<?php
/**
 * Created by PhpStorm.
 * User: Tioncico
 * Date: 2019/3/1 0001
 * Time: 10:04
 */
include "./vendor/autoload.php";
use GIFEndec\\Color;
use GIFEndec\\Encoder;
use GIFEndec\\Frame;
use GIFEndec\\IO\\FileStream;
use GIFEndec\\Events\\FrameDecodedEvent;
use GIFEndec\\Decoder;
//解析gif图片
//打开gif图片文件流
$gifStream = new FileStream("./Temp/1.gif");
//创建解析对象
$gifDecoder = new Decoder($gifStream);
$gifDecoder->decode(function (FrameDecodedEvent $event) {
    $paddedIndex = str\_pad($event->frameIndex, 3, '0', STR\_PAD_LEFT);
    //将每一帧存入指定文件夹
    $event->decodedFrame->getStream()->copyContentsToFile(
        \_\_DIR\_\_ . "/frames/frame{$paddedIndex}.gif"
    );
});
//创建gif生成对象
$gif = new Encoder();
$gifFilesArr = glob(\_\_DIR\_\_ . '/frames/frame*.gif');
//由于一开始生成的时候,是通过分析图片帧来的,而且是顺序读出,如果需要倒序,必须要先倒序下数组
$gifFilesArr = array_reverse($gifFilesArr);
foreach ($gifFilesArr as $file) {
    $stream = new FileStream($file);
    $frame = new Frame();
    $frame->setDisposalMethod(1);
    $frame->setStream($stream);
    $frame->setDuration(1); //每个图片的停留时间,1为0.01秒
    $frame->setTransparentColor(new Color(255, 255, 255));
    $gif->addFrame($frame);
}
$gif->addFooter();
// Copy result animation to file
$gif->getStream()->copyContentsToFile('skateboarder/test.gif');

就这样,我们就得到了一张倒放的图:

image.png

同时,我们可以倒放之后再顺放一遍,例如上面的吃棉花糖图:

<?php
/**
 * Created by PhpStorm.
 * User: Tioncico
 * Date: 2019/3/1 0001
 * Time: 10:04
 */
include "./vendor/autoload.php";
use GIFEndec\\Color;
use GIFEndec\\Encoder;
use GIFEndec\\Frame;
use GIFEndec\\IO\\FileStream;
use GIFEndec\\Events\\FrameDecodedEvent;
use GIFEndec\\Decoder;
//解析gif图片
//打开gif图片文件流
$gifStream = new FileStream("./Temp/2.gif");
//创建解析对象
$gifDecoder = new Decoder($gifStream);
$gifDecoder->decode(function (FrameDecodedEvent $event) {
    $paddedIndex = str\_pad($event->frameIndex, 3, '0', STR\_PAD_LEFT);
    //将每一帧存入指定文件夹
    $event->decodedFrame->getStream()->copyContentsToFile(
        \_\_DIR\_\_ . "/frames/frame{$paddedIndex}.gif"
    );
});
//创建gif生成对象
$gif = new Encoder();
$gifFilesArr = glob(\_\_DIR\_\_ . '/frames/frame*.gif');
//先倒放,后顺放
$gifFilesArr = array\_merge( array\_reverse($gifFilesArr),$gifFilesArr);
foreach ($gifFilesArr as $file) {
    $stream = new FileStream($file);
    $frame = new Frame();
    $frame->setDisposalMethod(1);
    $frame->setStream($stream);
    $frame->setDuration(1); //每个图片的停留时间,1为0.01秒
    $frame->setTransparentColor(new Color(255, 255, 255));
    $gif->addFrame($frame);
}
$gif->addFooter();
// Copy result animation to file
$gif->getStream()->copyContentsToFile('skateboarder/test3.gif');

image.png

哈哈哈哈哈

目录
相关文章
|
PHP
在 PHP 中将 WebP 转换为 GIF 图像格式
【8月更文挑战第27天】
276 2
|
3月前
|
关系型数据库 MySQL PHP
PHP和Mysql前后端交互效果实现
本文介绍了使用PHP连接MySQL数据库的基本函数及其实现案例。内容涵盖数据库连接、选择数据库、执行查询、获取结果等常用操作,并通过用户登录和修改密码的功能实例,展示了PHP与MySQL的交互过程及代码实现。
291 0
PHP和Mysql前后端交互效果实现
|
8月前
|
关系型数据库 MySQL Linux
查看Linux、Apache、MySQL、PHP版本的技巧
以上就是查看Linux、Apache、MySQL、PHP版本信息的方法。希望这些信息能帮助你更好地理解和使用你的LAMP技术栈。
408 17
|
前端开发 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
【10月更文挑战第21天】 本文将深入浅出地探讨如何使用PHP与MySQL构建一个动态网站,从环境搭建到项目部署,全程实战演示。无论你是编程新手还是希望巩固Web开发技能的老手,都能在这篇文章中找到实用的技巧和启发。我们将一起探索如何通过PHP处理用户请求,利用MySQL存储数据,并最终呈现动态内容给用户,打造属于自己的在线平台。 ####
535 0
|
9月前
|
关系型数据库 MySQL PHP
源码编译安装LAMP(HTTP服务,MYSQL ,PHP,以及bbs论坛)
通过以上步骤,你可以成功地在一台Linux服务器上从源码编译并安装LAMP环境,并配置一个BBS论坛(Discuz!)。这些步骤涵盖了从安装依赖、下载源代码、配置编译到安装完成的所有细节。每个命令的解释确保了过程的透明度,使即使是非专业人士也能够理解整个流程。
256 18
|
10月前
|
关系型数据库 MySQL 网络安全
如何排查和解决PHP连接数据库MYSQL失败写锁的问题
通过本文的介绍,您可以系统地了解如何排查和解决PHP连接MySQL数据库失败及写锁问题。通过检查配置、确保服务启动、调整防火墙设置和用户权限,以及识别和解决长时间运行的事务和死锁问题,可以有效地保障应用的稳定运行。
400 25
|
SQL 关系型数据库 MySQL
PHP与MySQL的高效交互:从基础到实践####
本文深入探讨了PHP与MySQL数据库之间的高效交互技术,涵盖了从基础连接到高级查询优化的全过程。不同于传统的摘要概述,这里我们直接以一段精简代码示例作为引子,展示如何在PHP中实现与MySQL的快速连接与简单查询,随后文章将围绕这一核心,逐步展开详细讲解,旨在为读者提供一个从入门到精通的实战指南。 ```php <?php // 数据库配置信息 $servername = "localhost"; $username = "root"; $password = "password"; $dbname = "test_db"; // 创建连接 $conn = new mysqli($se
316 31
|
安全 关系型数据库 MySQL
PHP与MySQL动态网站开发实战指南####
——深入探索LAMP栈下的高效数据交互与处理技巧 ####
|
关系型数据库 MySQL PHP
PHP与MySQL动态网站开发实战指南####
深入探索PHP与MySQL的协同工作机制,本文旨在通过一系列实战案例,揭示构建高效、稳定且用户友好的动态网站的秘诀。从环境搭建到数据交互,再到最佳实践分享,本文为开发者提供了一条清晰的学习路径,助力其在LAMP(Linux, Apache, MySQL, PHP/Perl/Python)栈上实现技术飞跃。 ####