PHP将图片合成gif动图

**一、**要实现此功能首先需要安装一个扩展:imagick扩展

我这里php环境使用的docker,直接在Dockerfile文件中定义后,生成容器即可:

复制代码
# 安装Imagick PHP扩展
RUN pecl install imagick && \
docker-php-ext-enable imagick

其他方式,可以自行搜索下。

安装后,执行php -m查看是否已经安装成功,安装成功如下图,列表中会显示imagick:

**二、**多个图片生成GIF动图

复制代码
        $imageData = []; //图片数据
        foreach ($imageArr as $item){ //$imageArr 图片数据 数组,我代码这里只需要png格式的图片
            $char = substr($item, -4);
            if($char == '.png'){
                $imageData[] = $item;
            }
        }

        $freq = 20; //每秒播放多少图片
        $interval = (int) (100 / $freq); //图片播放间隔时长 100是1秒

        $generateGifResult = self::generateGif($imageData, $gifFilePath, $interval, $width, $high);



     /**
     * @param $imageData *图片数据 数组
     * @param $gifPath *要输出的gif路径(文件所在的文件夹路径需要存在) ./test/test.gif
     * @param $interval *图片播放间隔时长
     * @return bool
     * @throws \ImagickException
     */
    public static function generateGif($imageData, $gifPath, $interval, $width = 200, $high = 300, $addWatermark = false)
    {
        $animation = new Imagick();
        $animation->setFormat('gif');

        foreach ($imageData as $file) {
            $img = new Imagick($file);
            $img->thumbnailImage($width, $high);//读取本地图片 将图片大小修改成自己定义的宽高
            if($addWatermark){ // 设置水印
                $text = new ImagickDraw();
                $text->setFillColor('#000');
                $text->setFont('Arial');
                $text->setFontSize(30);
                $text->setGravity(Imagick::GRAVITY_SOUTH); //水印位置
                $img->annotateImage($text, 0, 0, 0, '水印');
                unset($text);
            }
            //设置图像处理方法 3:清除此帧覆盖之前的图像 2:使用背景色清除边框区域 1:不丢弃,只覆盖下一帧图像 0:未指定处置
            $img->setImageDispose(3);
            $animation->addImage($img);//将图片加入到gif中
            $animation->setImageDelay($interval);//转场动画时间 100是1秒
            $animation->nextImage();
            unset($img);
        }

        //保存gif
        $animation->writeImages($gifPath,true);

        return true;
    }

生成后就是一个gif格式的动图文件了

相关推荐
网安Ruler10 分钟前
Web开发-PHP应用&TP框架&MVC模型&路由访问&模版渲染&安全写法&版本漏洞
前端·php·mvc
七七软件开发2 小时前
一对一交友小程序 / APP 系统架构分析
java·python·小程序·系统架构·php
一念&3 小时前
计算机网络中的socket是什么?编程语言中的socket编程又是什么?python的socket编程又该如何用?
python·计算机网络·php
啊阿狸不会拉杆5 小时前
《Java 程序设计》核心知识点梳理与深入探究
java·开发语言·python·算法·php·intellij-idea
傻啦嘿哟5 小时前
代理IP并发控制:多线程爬虫的加速引擎
开发语言·php
下页、再停留6 小时前
【PHP】接入百度AI开放平台人脸识别API,实现人脸对比
人工智能·百度·php
苏琢玉7 小时前
如何优雅地处理多种电商优惠规则?我用 PHP 封装了一个 Promotion Engine
后端·php·composer
七七软件开发8 小时前
团购商城 app 系统架构分析
java·python·小程序·eclipse·系统架构·php
奔跑吧邓邓子20 小时前
从0到1学PHP(十):PHP 文件操作:读写与管理文件
开发语言·php·文件操作
眺望电子-ARM嵌入式21 小时前
技术笔记 | Ubuntu 系统 OTA 升级全流程详解
数据库·postgresql·php