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()为准
如图所示: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 6.9.3-7 Q16 x64
2.2)安装imagemagick
下载的文件解压后,将程序整体复制到无空格 无中文字符的目录中 D:\ImageMagick
配置环境变量,在“此电脑”右键“属性”,以此点击“高级” “环境变量” ,在 “系统变量”中找到键为path的数据,双击path,选择“新建”,将刚刚放程序的目录“ D:\ImageMagick ”填入即可
将“D:\ImageMagick\modules\coders”目录中的所有的以“.DLL‘为后缀的文件放入php的根目录
重启计算机
3.安装ghostscript
下载地址: https://www.ghostscript.com/download/gsdnld.html
下载适合电脑的版本,安装后将安装目录的bin目录配置到环境变量里,运行cmd, 运行gswin64出现以下画面就是安装成功(我安装的是windows64位的,所以命令是gswin64)
安装后,可以通过cmd进行调式。
如果ghostscript与 ImageMagick 不匹配的时候会出现PDF转换时程序停止,但图片正常
打开D:\ImageMagick文件夹,然后进入命令行输入,”convert ***.pdf ***。如果能顺利转换,则环境配置等没问题。可以执行以下PHP代码
/**
* 将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();
*/
}