php7.0 + Imagick-3.4.2 + ImageMagick-6.9.3-7-vc14-x64 + ghostscript 9.20实现pdf转图片
使用环境
下载拓展imagick
http://pecl.php.net/package/imagick
下载对应php版本 ts还是nts x86还是x64imagick 这里以phpinfo()为准
安装拓展imagick
- 解压上述下载的文件后,将php_imagick.dll复制到php/ext目录,或者其他你的存放拓展的目录
- 修改php.ini 加上extension=php_imagick.dll,注意php可能有多个ini,以phpinfo为准
- 此时复制解压上述文件目录中其他dll到php目录,重启nginx,此时phpinfo显示拓展安装成功,但是 ImageMagick number of supported formats为0,到这里成功安装了一半下载imagemagick程序
下载imagemagick程序
https://windows.php.net/downloads/pecl/deps/
1、下载对应版本的软件版本,是vc11还是vc14还是vc15 3.x86还是x64 都要以phpinfo为准
2、官网上下载的软件根据官网的信息显示,可能会不支持
安装imagemagick程序
- 下载的文件解压后,将程序整体复制到无空格 无中文字符的目录中 例:F:\ImageMagick-6.9.3-7-vc14-x64
- 配置环境变量,在“此电脑”右键“属性”,以此点击“高级” “环境变量” ,在 “系统变量”中找到键为path的数据,双击path,选择“新建”,将刚刚放程序的目录“F:\ImageMagick-6.9.3-7-vc14-x64\bin”填入即可(win7 win10配置方法不同,但是位置相同)
- 将“F:\ImageMagick-6.9.3-7-vc14-x64\bin”目录中的所有的以“.DLL‘为后缀的文件放入php的根目录
扩展安装完成后重启计算机
安装ghostscript
imagemagick本身不能处理pdf,处理pdf还需要安装ghostscrip
下载地址:https://github.com/ArtifexSoftware/ghostpdl-downloads/releases?after=gs924rc2
下载的版本需要能被imagemagick调用,如果下载后,imagemagick处理pdf时提示imagemagick停止,那么下载其他版本的ghostscrip再进行尝试
windows下载gs920w64.exe文件安装即可,安装后将ghostscrip的bin目录(C:\Program Files\gs\gs9.20\bin)加入到环境变量中
测试安装是否有效,在命令行执行 convert.exe C:\Users\Administrator\Desktop\1.pdf 2.png
F:\ImageMagick-6.9.3-7-vc14-x64\bin>convert.exe C:\Users\Administrator\Desktop\1.pdf 2.png
convert.exe: UnableToOpenConfigureFile `delegates.xml' @ warning/configure.c/GetConfigureOptions/706.
虽然提示了一个警告,但是图片确实已经生成,这表明 扩展已经安装成功,就可以去使用php去调用了
/**
* 将pdf文件转化为多张png图片
* @param string $pdf pdf所在绝对路径
* @param string $path 新生成图片所在绝对路径
* @return array|bool
*/
function pdf2png($pdf, $path)
{
if (!extension_loaded('imagick')) return false;
if (!file_exists($pdf)) return false;
$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) {
$return[] = $fileName;
}
}
return $return;
}
/**
* 将pdf转化为单一png图片
* @param string $pdf pdf所在绝对路径
* @param string $path 新生成图片所在绝对路径
*
* @throws Exception
*/
function pdf2png2($pdf, $path)
{
try {
$im = new Imagick();
$im->setCompressionQuality(100);
$im->setResolution(120, 120);//设置分辨率 值越大分辨率越高
$im->readImage($pdf);
$canvas = new Imagick();
$imgNum = $im->getNumberImages();
//$canvas->setResolution(120, 120);
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 . microtime(true) . '.png');
} catch (Exception $e) {
throw $e;
}
}
文章来源于:https://www.cnblogs.com/jinxiblog/p/8053008.html
https://blog.csdn.net/jeff_love_marina/article/details/80838055