简介
ImageMagick
是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF、JPEG、GIF、PNG、PDF以及PhotoCD等格式。Ghostscript
是一套基于Adobe、PostScript及可移植文档格式(PDF)的页面描述语言等而编译成的免费软件。
使用PHP将PDF文档转换为图片需要安装Imagemagick软件、PHP的Imagick扩展、GhostScript软件。
安装
安装Imagemagick
下载地址:http://windows.php.net/downloads/pecl/deps/
我下载的是:ImageMagick-7.1.0-18-vc15-x64.zip
下载并解压至指定目录,然后把目录中的bin文件夹添加到path环境变量:
测试是否安装成功
打开cmd进入一个有图片的文件夹,测试是否可以完成图片格式的转换:
magick convert 1.jpg 1.gif
测试pdf转png
magick convert -density 300 -trim test.pdf -quality 100 test.png
安装Imagick扩展
安装Imagemagick软件后,还需安装PHP的Imagick扩展。下载地址:http://windows.php.net/downloads/pecl/releases/imagick/
注意要与phpinfo中的版本一致。
根据我的环境,我下载的是php_imagick-3.7.0-7.4-ts-vc15-x64.zip
打开php.ini,在末尾添加:
extension=imagick
重启PHP服务。
测试是否安装成功
查看phpinfo,显示如下界面则说明安装成功:
安装GhostScript
下载地址:https://www.ghostscript.com/releases/gsdnld.html
安装后需要将\gs\gs9.55.0\bin目录添加至path环境变量。
测试是否安装成功
打开cmd进入一个有pdf文档的文件夹,在该文件夹下创建一个output文件夹(用于存放转换后的图片),测试是否可以将pdf文档转换为图片:
gswin64c -dSAFER -dBATCH -dNOPAUSE -r250 -dTextAlphaBits=4 -dGraphicsAlphaBits=4 -sDEVICE=jpeg -sOutputFile=output/%d.jpg 1.pdf
PHP转换程序
上面的安装够完成后,下面使用php代码来完成pdf=>png
的转换,直接上代码:
/**
* PDF2PNG
* @param $pdf 待处理的PDF文件
* @param $path 待保存的图片路径
* @param $page 待导出的页面 -1为全部 0为第一页 1为第二页
* @return 保存好的图片路径和文件名
*/
function pdf2png($pdf, $path, $page = -1)
{
if (!extension_loaded('imagick')) {
return false;
}
if (!file_exists($pdf)) {
return false;
}
$im = new Imagick();
$im->setResolution(120, 120);
$im->setCompressionQuality(100);
if ($page == -1)
$im->readImage($pdf);
else
$im->readImage($pdf . "[" . $page . "]");
foreach ($im as $key => $val) {
$val->setImageFormat('png');
$filename = $path . "/" . $key . '.png';
if ($val->writeImage($filename) == true) {
$return[] = $key . '.png';
}
}
return $return;
}
$pdfPath = __DIR__ . "/test.pdf"; //要转换为图片的pdf的绝对地址
$outputFolder = __DIR__ . "/output"; //输出图片的目录
$imgs = pdf2png($pdfPath, $outputFolder);
for ($i = 0, $count = count($imgs); $i < $count; $i++) {
echo "<div align=center><font color=red>Page " . ($i + 1) . "</font><br><a href=\"ouput/" . $imgs[$i] . "\" target=_blank><img border=3 height=120 width=90 src=\"ouput/" . $imgs[$i] . "\"></a></div><p>";
}
效果:
其他
生成jpg时出现黑色的背景,可以添加以下代码解决:
$im->setImageFormat('jpg');
$im->setBackgroundColor('white');
$im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
$im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE);
设置图片尺寸:
$im->scaleImage(945, 1336.45, true);