解决Imagick和GS将PDF转成JPG图片异常及例子
本想简单的将PDF转JPG,可是网上在线转不太安全,某些PDF阅读器又都要收费,那只好用代码将pdf转成图片,自己动手丰衣足食。在PHP中使用Imagick将PDF转JPG/PNG等图片时遇到异常,现在记录下问题解决方法和pdf转图片例子。
我的环境
windows 10
php 5.5.12
ghostscript 9.54-win32
ImageMagick 6.9.4-Q16
Imagick 已安装
ghostscript 已安装
gs环境变量 已添加
PDF转图片异常过程
1、遇到PDF转图片加载PDF文件异常:
ImagickException: Failed to read the file in ...
下载ghostscript安装添加环境变量异常得到解决。
2、使用PHP类Imagick加载pdf图片报错:
$im = new Imagick(); $im->readImage("C:/Users/XQ/Desktop/1.pdf");
PDFDelegateFailed `系统找不到指定的文件。 ' @ error/pdf.c/ReadPDFImage/798
3、但使用命令可以正常生成:
C:\Program Files (x86)\ImageMagick-6.9.4-Q16>convert C:/Users/XQ/Desktop/1.pdf C:/Users/XQ/Desktop/1.jpg
解决方法
切换低版本 ghostscript 9.26-win32,问题已得到解决。
ghostscript下载:
https://www.ghostscript.com/download/gsdnld.html
https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/tag/gs926
php将pdf转png图片例子
//实例化 $im = new Imagick(); //加载pdf文件 $im->readImage("C:/Users/XQ/Desktop/1.pdf"); //质量100% $im->setCompressionQuality(100); //创建画布用来拼接所有页的图片 $canvas = new Imagick(); //设置画布宽高 $canvas->newImage($im->getImageWidth(), $im->getImageHeight()*$im->count(), 'white'); //PNG格式图片 $canvas->setImageFormat('png'); //循环每张图 foreach ($im as $k => $v) { //PNG格式图片 $v->setImageFormat('png'); //输出每页一张图片 $v->writeImage("C:/Users/XQ/Desktop/i_{$k}.png"); //在画布中拼接图片 $canvas->compositeImage($v, Imagick::COMPOSITE_OVER, 0, $im->getImageHeight()*$k); } //输出pdf转的所有图片拼接成一张图片 $canvas->writeImage("C:/Users/XQ/Desktop/all.png"); //销毁画布 $canvas->destroy(); //销毁 $im->destroy();
原创文章,转载请注明出处:https://www.weizhixi.com/article/115.html