在PHP中想要将多张图片合成一张GIF图,只能依靠GD或者imagick这两个扩展。GD比较老,还算比较稳定,但是php7.3之后官网就不建议使用GD,官方推荐Imagick扩展绘制图片。
一 安装Imagick扩展
1.1 安装ImageMagick之前需要安装一些Linux扩展包,比如 ImageMagick-devel 扩展包,否则会报如下错误信息
安装方式如下:
yum install -y ImageMagick-devel libwebp-devel libwebp-tools
1.2 下载并安装imagick扩展:对于PHP扩展,大家可以从PHP官网库pecl中下载:
# 下载源码
wget https://pecl.php.net/get/imagick-3.7.0.tgz
# 解压缩
tar -zxvf imagick-3.7.0.tgz
# 使用 phpize 生成编译配置文件
/usr/local/php/bin/phpize
# 编译
./configure --with-php-config=/usr/local/php/bin/php-config
# 安装
make && make install
1.3 修改PHP配置文件使其生效
使用vim编辑/usr/local/php/lib/php.ini文件,添加如下信息:
extension=imagick.so
注意:如果不知道PHP配置文件具体位置的,可以使用 php --ini 查看
二 使用Imagick合成GIF
$animation = new \Imagick();
$animation->setFormat('gif');
foreach ($img_path_arr as $file) {
$img = new \Imagick($file);
$img->thumbnailImage(500,500);//读取本地图片
//设置图像处理方法,3:清除此帧覆盖之前的图像 2:使用背景色清除边框区域 1:不要丢弃,只覆盖下一帧图像 0:未指定处置(相当于“无”)
$img->setImageDispose(3);
$animation->addImage($img);//将图片加入到gif中
$animation->setImageDelay(100);//转场动画时间
$animation->nextImage();
unset($img);
}
//保存gif
$output_path = 'output.gif';
//注意:是writeImages而不是writeImage方法
$animation->writeImages($output_path,true);
注意:$img->thumbnailImage(500,500);是将图片大小修改成500*500,如果需要保持原图大小可以去除这行代码
领取专属 10元无门槛券
私享最新 技术干货