最近工作项目中,有一个需求需要pdf文件转成图片格式。以下纪录PHP中使用imagick实现把PDF转成图片的操作过程。
本地环境:
wamp3.2集成开发环境:
Apache :2.4.41
Php :7.3.12
MariaDB :10.4.10
安装步骤:
1. 安装ImageMagick
下载地址:http://www.imagemagick.org/download/binaries/ ,可下载最新版本,如 ImageMagick-7.0.10-10-Q8-x64-dll.exe,.exe格式安装软件。默认会安装Path路径,若没有,可自行配置。
把ImageMagick程序安装目录下的modules\coders 文件夹下的IM_dll 复制到 wamp64\bin\apache\apache2.4.41\bin目录下。
2.下载拓展
php imagick扩展连接地址:
地址一:http://windows.php.net/downloads/pecl/releases/imagick/
地址二:https://pecl.php.net/package/imagick
要点: 注意对应php版本 ts还是nts x86还是x64
这里以phpinfo()为准所以我应该下载imagick 3.4.4版本 PHP7.3 Thread Safe (TS) x64 的拓展——php_imagick-3.4.4-7.3-ts-vc15-x64.zip.
3. 安装拓展
1.解压上述文件后,将php_imagick.dll复制到对应版本php扩展 ext 目录。
2.修改php.ini 加上extension=php_imagick.dll,这里以phpinfo 实际加载的Loaded Configuration File 参数为准。
4. 执行pdf转png图片代码
1234567891011121314151617181920212223242526272829303132333435363738 | /** * 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 => $Var) { $Var->setImageFormat( 'png' ); $filename = $path. "/" . md5($Key. time ()). '.png' ; if ($Var->writeImage($filename) == true ) { $Return[] = $filename; } } return $Return; } $path= "D:/software/wamp64/www/imagick/images" ; // 请确保当前目录下有这个文件夹,由于一直要用,所以就不加检测了 $s=pdf2png( "D:/software/wamp64/www/imagick/1.pdf" ,$path); var_dump($s); |
注意:
报错1:
12 | Fatal error: Uncaught ImagickException: unable to open image '1.pdf' : No such file or directory @ error /blob .c /OpenBlob/ 3496 in D:\software\wamp64\www\imagick\index.php on line 59 |
解决方案:pdf文件路径使用绝对路径
报错2:
1 | $im->readImage($pdf); Fatal error: 抛出ImagickException |
解决方案:
安装ghostscript,https://www.ghostscript.com/download.html