PHP将图片合成gif动图

news/2024/11/25 1:01:35/

一、要实现此功能首先需要安装一个扩展: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格式的动图文件了


http://www.ppmy.cn/news/1549680.html

相关文章

Spring Boot入门——Spring Boot项目的创建

一、网页版创建Spring Boot项目(了解) 1.进入网页https://start.spring.io​​​​​按如下方式选择 2.添加依赖 3.搜索web,添加Spring Wed依赖 4.点击下载代码 5. 使用idea打开下载好的文件即可 但实际上我们并不使用网页来创建Spring Boot项…

如何通过OpenSSL来创建自签名的CA证书?

通过创建自签名CA证书可以让我们在没有商业支持的情况下学习与研究PKI(公钥基础设施)和SSL/TLS技术,本文将详细介绍如何通过OpenSSL来创建自签名的CA证书。 1. 初衷:为什么需要创建自签名CA证书? 除了开篇引言中提到的…

【杂记】vLLM如何指定GPU单卡/多卡离线推理

写在前面 仅作个人学习与记录用。主要记录vLLM指定GPU单卡/多卡离线推理的方法。 vLLM官方文档中Environment Variables页面有对指定GPU方法的唯一描述: # used to control the visible devices in the distributed setting "CUDA_VISIBLE_DEVICES": la…

微软在Ignite 2024发布Copilot+新功能

🦉 AI新闻 🚀 微软在Ignite 2024发布Copilot新功能 摘要:微软在Ignite 2024大会上宣布,Microsoft 365 Copilot将利用Copilot PC中的NPU本地运行AI模型,减少网络依赖。此功能将提升用户在Outlook和Word中的AI写作辅助…

Dockerfile复制目录进入镜像里

使用 ADD 复制目录进入镜像里 FROM ubuntu:22.04WORKDIR /rootRUN mkdir -p ./custom_nodes/ComfyUI-FluxTrainerADD ComfyUI-FluxTrainer ./custom_nodes/ComfyUI-FluxTrainerComfyUI-FluxTrainer 是一个目录,需要先 mkdir 创建这个目录,然后ADD 复制进…

php常用伪协议整理

前言 欢迎来到我的博客 个人主页:北岭敲键盘的荒漠猫-CSDN博客 本文整理php常见的伪协议 php伪协议介绍 直观点,就是php可以识别的协议。 类似于我们访问网站的http协议,我们用浏览器访问我们自己本地文件的file协议等。 php可以识别这些协议&#xf…

C语言——break、continue、goto

目录 一、break 二、continue 1、在while循环中 2、在for循环中 三、go to 一、break 作用是终止循环&#xff0c;在循环内遇到break直接就跳出循环。 注&#xff1a; 一个break语句只能跳出一层循环。 代码演示&#xff1a; #include<stdio.h>void test01() {for (…

Elasticsearch 分词器

一、分词器的作用 分词器&#xff08;Analyzer&#xff09;是Elasticsearch中用于文本分析与处理的组件。它的主要作用是将用户输入的一段文本&#xff0c;按照一定逻辑分析成多个词语。这个过程也叫做文本分析或文本切分。 二、分词器的构成 分词器由三部分组成&#xff1a…