添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
聪明伶俐的核桃  ·  (Visual Studio ...·  1 年前    · 
气势凌人的稀饭  ·  2021 | ...·  1 年前    · 
鬼畜的绿豆  ·  org.springframework.we ...·  1 年前    · 

网上搜索的安装方法会报如下错误

PHP Warning: PHP Startup: Unable to load dynamic library 'php_imagick.dll' (tried: D:\phpstudy_pro\Extensions\php\php7.0.9nts\ext\php_imagick.dll (找不到指定的模块。), D:\phpstudy_pro\Extensions\php\php7.0.9nts\ext\php_php_imagick.dll.dll (找不到指定的模块。)) in Unknown on line 0 参考了 PHP7.0版本报错 PHP7.4版本报错 这两篇文章后总结出如何在PHP7.0版本安装imagick扩展的步骤, 7.1、7.2、7.3、7.4版本的安装留待以后测试。 测试完成,此流程亦适用于7.1--7.4。

需要下载的文件

  • ImageMagick
  • imagick
  • Ghostscript
  • 打印phpinfo(),查看自己的php版本信息,如下图红框部分

    我的php版本是7.0、64位、NTS、VC14、Thread Safety是disabled,这些信息下面下载文件会用到

    1.下载并配置ImageMagick

    下载地址: windows.php.net/downloads/p…

    我的版本是VC14、64位,所以下载的是 ImageMagick-6.9.3-7-vc14-x64.zip

    将下载后的文件解压缩,把bin目录下的文件复制到在C盘中新建文件夹ImageMagick-6.9.3-7-vc14-x64中

    新建环境变量:C:\ImageMagick-6.9.3-7-vc14-x64

    新建系统变量:MAGICK_HOME,其值为:C:\ImageMagick-6.9.3-7-vc14-x64

    2.下载并配置imagick

    PHP 7.4、8.0、8.1版本

    PHP 7.1、7.2、7.3、7.4版本

    PHP 5.5、5.6、7.0、7.1版本

    我的版本是PHP7.0、64位、NTS、Thread Safety是disabled故下载 7.0 Non Thread Safe (NTS) x64

    将下载后的文件解压缩,把php_imagick.dll文件复制到php根目录的ext目录里,我使用的是phpstudy,复制的路径如图

    然后在php根目录下的php.ini文件中添加 extension = php_imagick.dll

    至此Imagick扩展安装完成,重启电脑后可在phpinfo()中看到

    3.下载并配置Ghostscript

    下面贴出64位版本的下载地址,32位请自行去github下载: github.com/ArtifexSoft…

    gs918w64.exe

    gs919w64.exe

    gs920w64.exe

    gs921w64.exe

    gs922w64.exe

    gs923w64.exe

    gs924w64.exe

    gs925w64.exe

    gs926aw64.exe

    gs927w64.exe

    gs950w64.exe

    gs951w64.exe

    gs952w64.exe

    gs9530w64.exe

    gs9531w64.exe

    gs9532w64.exe

    gs9533w64.exe

    gs9540w64.exe

    gs9550w64.exe

    运行下载后的文件会自动安装,安装完毕后将bin的目录添加到环境变量中

    至此所有准备工作已完成。

    3.php代码

        public function pdfToimg($pdf, $path)
            //路径格式如下
            //$pdf = 'D:\phpstudy_pro\WWW\www.nilin.ceshi.com\test11.pdf';
            //$path = 'D:\phpstudy_pro\WWW\www.nilin.ceshi.com\assss2.png';
            $im = new Imagick();
            $im->setCompressionQuality(100);
            $im->setResolution(120, 120);//设置分辨率 值越大分辨率越高
            $im->readImage($pdf);
            $canvas = new Imagick();
            $imgNum = $im->getNumberImages();
            foreach ($im as $k => $sub) {
                $sub->setImageFormat('png');
                $sub->setResolution(120, 120);
                $sub->stripImage();
                $sub->trimImage(0);
                $width  = $sub->getImageWidth() + 10;
                $height = $sub->getImageHeight() + 10;
                if ($k + 1 == $imgNum) {
                    $height += 10;
                } //最后添加10的height
                $canvas->newImage($width, $height, new ImagickPixel('white'));
                $canvas->compositeImage($sub, Imagick::COMPOSITE_DEFAULT, 5, 5);
            $canvas->resetIterator();
            $canvas->appendImages(true)->writeImage($path);
            return "转换成功";
    
  • 在运行代码后报错 500 Internal Server Error,经排查问题是出在 $im->readImage($pdf); 处。百度后找到解决办法是更换gs版本,于是便从gs918开始一个个尝试。
  • 尝试过所有gs版本后还是未能解决问题,又找到了一个办法是在bin的同级目录下复制并粘贴gswin64.exe/gswin64c.exe,改名为gs.exe。尝试后还是未能解决问题。
  • 最后受到启发是不是程序没加载imagick或者是$pdf的路径不对,于是有如下调试
  •     if (!extension_loaded('imagick'))
            die('Imagick is not installed'); 
        }else{
            echo 'Imagick installed<hr>';
        $pdf = "D:\phpstudy_pro\WWW\www.nilin.ceshi.com\test11.pdf"; 
        if(file_exists($pdf)){ 
            echo "$pdf exists.<br>"; 
        else{ 
            die("$pdf doesnt exist."); 
    

    问题出在pdf地址不对,可是这个目录下的pdf文件确实存在。最终我想出是不是 $pdf = "D:\phpstudy_pro\WWW\www.nilin.ceshi.com\test11.pdf";""的缘故。于是尝试将其改为''后问题意外的解决了。但是不理解的地方一是我尝试过将$pdf文件路径使用单引号,$path使用双引号的时候也能成功运行。二是将png转为jpg,路径也均是用""$pdf = "D:\phpstudy_pro\WWW\www.nilin.ceshi.com\aaaa.png";$path = "D:\phpstudy_pro\WWW\www.nilin.ceshi.com\bbbb.jpg";也能成功运行。 为什么pdf文件路径使用双引号就不行了呢? 原因出在:双引号下的\t会被转义,如下图红框部分,所以实际的路径变成了D:\phpstudy_pro\WWW\www.nilin.ceshi.com est11.pdf,导致readImage($pdf)读取的是无效路径。

    建议小伙伴们遇到类似问题后把以上途径都尝试一下,毕竟我这只是其中的一种情况。不一定适用于所有人。

    php版本升级到7.2.9时,按照上文流程配置后仍报错PHP Warning: PHP Startup: Unable to load dynamic library 'php_imagick.dll' (tried: D:\phpstudy_pro\Extensions\php\php7.2.9nts\ext\php_imagick.dll (找不到指定的模块。), D:\phpstudy_pro\Extensions\php\php7.2.9nts\ext\php_php_imagick.dll.dll (找不到指定的模块。)) in Unknown on line 0。排查后发现是丢失了VCOMP140.dll文件,下载安装Visual C++ Redistributable for Visual Studio 2015后解决问题。至此测试了php 7.1、7.3、7.4版本下均正常运行。

    私信