解决Imagick和GS将PDF转成JPG图片异常及例子

知兮丶青 异常 · 转换
阅读(1232) 2021-04-08
解决Imagick和GS将PDF转成JPG图片异常及例子
解决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