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?imageView2/2/w/1280');
    break;
}
//销毁资源
$Imagick->clear();
$Imagick->destroy();
发表评论
评论
大雄回复
2018-11-12 11:42Windows 10ChromeIP:广东
学习到了。
sumking回复
2018-12-05 15:50Windows 7ChromeIP:江苏
这个不错 支持一下
小俊回复
2019-01-01 12:00Windows 10ChromeIP:广东
关关大神新年大吉吧
紫书海回复
2019-03-21 11:48Windows 7FirefoxIP:江西
如此好文章一定要留下名啊
你的灵兽看起来很好吃回复
2019-04-02 19:05Windows 7FirefoxIP:江西
虽然不知道说的是什么,但看起来好厉害的样子!
冬瓜小说网回复
2021-04-02 18:03Windows 10ChromeIP:河南
学习了,谢谢大神