PHP 和 Imagick

前段时间遇到了处理gif动图的需求,主要就是截取GIF的第一帧来作为封面图,PHP自带的扩展并没有什么好的解决方法,不过可以通过扩展Imagick来解决。

以下教程适用于Windows

安装

安装 Imagick

PHP5.5~7.1,传送门:https://windows.php.net/downloads/pecl/releases/imagick/3.4.3/
PHP7.2,传送门:https://windows.php.net/downloads/pecl/snaps/imagick/3.4.3/

  • 选择合适自己的版本(nts/ts、x86/x64、php version),下载解压后,将扩展文件php_imagick.dll复制到PHP的扩展目录,通常在PHP运行目录下的./ext/目录。
  • 修改php.ini,添加该扩展extension=php_imagick.dll,注意,如果是PHP7以上的版本,写法可能是extension=imagick,如果你不确定的话,可以看看配置文件中别的扩展是怎么写的
  • 复制压缩文件内的其它.dll文件到php根目录,重启web环境
  • 访问phpinfo(),在配置中出现了Imagick,说明扩展生效。

安装 ImageMagick

ImageMagick是一个开源的命令行工具,Imagick通过ImageMagick来处理图像。

下载传送门: https://windows.php.net/downloads/pecl/deps/

  • 还是选择合适自己的版本,注意上面截图上的Imagick compiled with ImageMagick version,在文件列表中选择合适的版本。
  • 将ImageMagick目录添加到系统环境变量(属性->高级系统设置->环境变量->系统变量->path)中
  • ./ImageMagick/bin目录中所有的.dll文件复制php根目录,重启web环境。
  • 访问phpinfo(),如图显示了支持的文件类型,说明安装生效。

应用

<?php

$imgPath = './upload/test.gif';
//载入图像
$Imagick = new Imagick($imgPath);
//枚举每一帧图片
foreach ($Imagick as $frame){
    //保存第一帧为png格式的缩略图
    $frame->writeImage('./upload/test.png');
    break;
}
//销毁资源
$Imagick->clear();
$Imagick->destroy();
根据相关法律法规和政策,留言功能不予开放