PHP利用imagick实现PDF转图片格式

1.php_imagick扩展

1.1)下载php_imagick扩展

下载地址一: http://windows.php.net/downloads/pecl/releases/imagick/
  下载地址二: https://pecl.php.net/package/imagick
  要点: 注意对应php版本 ts还是nts x86还是x64
  这里以phpinfo()为准

phpinfo截图
phpinfo截图

如图所示:PHP7.1版本,X64,MSVC14,TS。则我们需要扩展:php_imagick-3.4.0-5.5-ts-vc11-x64.zip

1.2)安装 php_imagick

解压上述文件后,将php_imagick.dll复制到php/ext目录,或者其他你的存放拓展的目录
  修改php.ini 加上extension=php_imagick.dll,
  此时复制解压上述文件目录中其他dll到php目录,重启apache,此时phpinfo显示拓展安装成功,但是 ImageMagick number of supported formats为0,到这里成功安装了一半

2.imagemagick程序

2.1)下载imagemagick程序

下载地址:http://windows.php.net/downloads/pecl/deps/

下载与phpinfo提示一致的版本,此时需要注意  : 1.软件版本对应     2.vc11还是vc14 3.x86还是x64 都要以phpinfo为准

查询ImageMagick版本
查询ImageMagick版本

如图所示,我们需要下载 ImageMagick 6.9.3-7 Q16 x64 

2.2)安装imagemagick

下载的文件解压后,将程序整体复制到无空格 无中文字符的目录中 D:\ImageMagick
  配置环境变量,在“此电脑”右键“属性”,以此点击“高级” “环境变量” ,在 “系统变量”中找到键为path的数据,双击path,选择“新建”,将刚刚放程序的目录“ D:\ImageMagick ”填入即可
  将“D:\ImageMagick\modules\coders”目录中的所有的以“.DLL‘为后缀的文件放入php的根目录

基础技术、技术与框架PHP利用imagick实现PDF转图片格式插图2
添加到Path环境变量

重启计算机

3.安装ghostscript

下载地址: https://www.ghostscript.com/download/gsdnld.html

下载适合电脑的版本,安装后将安装目录的bin目录配置到环境变量里,运行cmd,  运行gswin64出现以下画面就是安装成功(我安装的是windows64位的,所以命令是gswin64)
安装后,可以通过cmd进行调式。

如果ghostscript与 ImageMagick 不匹配的时候会出现PDF转换时程序停止,但图片正常

打开D:\ImageMagick文件夹,然后进入命令行输入,”convert ***.pdf ***。如果能顺利转换,则环境配置等没问题。可以执行以下PHP代码

cmd调试ImageMagick模块
cmd调试ImageMagick模块
/**
     * 将pdf文件转化为多张png图片
     * @param string $pdf  pdf所在路径 (/www/pdf/abc.pdf pdf所在的绝对路径)
     * @param string $path 新生成图片所在路径 (/www/pngs/)
     *
     * @return array|bool
     */
    function pdf2png($pdf, $path)
    {
        $return = array();
        if (!extension_loaded('imagick')) {
            $return["state"]=0;
            $return["error"]="未扩展imagick模块";
            return $return;
        }
        if (!file_exists($pdf)) {
            $return["state"]=0;
            $return["error"]="PDF路径错误";
            return $return;

        }
        /*转换代码*/
        $im = new \Imagick();
        $im->setResolution(120, 120); //设置分辨率 值越大分辨率越高
        $im->setCompressionQuality(100);
        $im->readImage($pdf);
        foreach ($im as $k => $v) {
            $v->setImageFormat('png');
            $fileName = $path . md5($k . time()) . '.png';
            if ($v->writeImage($fileName) == true) {
                $file[] = $fileName;
            }
        }
            $return["state"]=1;
            $return["file"]=$file;
            return $return;
       //转换PNG时透明底怎么办
       /*
       $im = new \Imagick(); 
		$im->setResolution(850, 850);
		$im->setCompressionQuality(100);//设置图片压缩的质量 
		if($page==-1)  {
			$PDFFile = $path1.$pdf;
			$ss = $im->readImage($PDFFile);
			
		}else{
			// $im->readImage($pdf."[".$page."]");//从文件名读取图像
		}
		$im->setImageFormat('jpg');
		$im->setBackgroundColor('white');
		$Height = $im->getImageHeight();
		$Width = $im->getImageWidth();
		$filename1 = $path1."/Uploads/bxpng/". md5(time()).'.jpg';
	
		$im->mergeImageLayers(\Imagick::LAYERMETHOD_FLATTEN);
		$im->setImageAlphaChannel(\Imagick::ALPHACHANNEL_REMOVE);
	
		if($Width>1000||$Height>1000){
			$im->scaleImage(850, 850, true);
		
		}else{
			$im->scaleImage($Width, $Height, true);

		}// return '阻住';
		$dd = $im->writeImage($filename1); 
		$im->destroy();	

       */
    }