步骤教程:
Imagick 扩展
https://pecl.php.net/package/imagick
安装imagemagick
https://windows.php.net/downloads/pecl/deps/
安装Ghostscript软件
https://www.ghostscript.com/releases/gsdnld.html
windows下用Imagick将pdf转图片 一直报错:无法读取文件的解决方案:
把ghostscript的bin目录下的 gswin64c.exe拷贝一份,重命名为:gs.exe
windows下用Imagick将pdf转图片 一直报错:无法读取文件的解决方案
按照步骤安装php扩展、ImageMagick,ghostscript。版本要仔细检查,最后完全OK。并可以将图片合成转换等操作,就是在读取pdf时报错。重新安装了很多版本,都无法解决。
if(!file_exists($pdf_path)){
return false;
}
$im=new \Imagick();$im->setCompressionQuality(100);$im->setResolution(120, 120);//设置分辨率 值越大分辨率越高$pdf_path=readlink($pdf_path);$im->readImage($pdf_path);//这里报错: ImagickException in ***
解决方案:
把ghostscript的bin目录下的 gswin64c.exe拷贝一份,重命名为:gs.exe
Windows环境下
一、开启 Imagick 扩展
1、安装PHP扩展:Imagick,下载地址 https://pecl.php.net/package/imagick 注意和php版本保持一致;
2、将下载下来的文件解压,把php_imagick.dll复制到php/ext下,即php的扩展目录;
3、打开php.ini文件,添加
extension=php_imagick.dll
1
4、重启apache
二、安装imagemagick
1、下载地址:https://windows.php.net/downloads/pecl/deps/
2、将下载下来的imagemagick文件解压到E盘目录下(目录可根据情况调整,我这里E:\ImageMagick-7.1.0-18-vc15-x64);
3、将E:\ImageMagick-7.1.0-18-vc15-x64\bin加入到系统环境变量path中
4、然后将E:\ImageMagick-7.1.0-18-vc15-x64\bin目录下所有的以dll结尾的文件复制到php根目录下,如果提示重复点击跳过即可
5、复制完成后重启Apache(建议重启计算机),这时候php的imagick拓展安装完成
三、安装Ghostscript软件
1、Ghostscript下载地址:https://www.ghostscript.com/releases/gsdnld.html
四、实例
$newPathName = $fileDir."/".mt_rand(1000,9999).$attaItem['name'];
try {
if(file_exists($uploadConfig['savepath'].$attaItem['url'])){
$fileInfo = pathinfo($uploadConfig['savepath'].$attaItem['url']);
// 判断是否为PDF
if(in_array($fileInfo['extension'],['pdf'])){
try {
$imagick = new Imagick();
$imagick->readImage($uploadConfig['savepath'].$attaItem['url']); // 读取PDF
foreach($imagick as $k => $v){
$v->setImageFormat('png'); // 设置输出图片格式为PNG
$newFileName = $k.date('Ymdhi',time()).'.png';
$Filename = $fileDir.'/'.$newFileName;
$v->writeImage($Filename); // 将图片写入文件
$attachIdPathArr[$attaItem['id']][] = $Filename;
}
$imagick->clear();
$imagick->destroy();
} catch (\ImagickException $e) {
// 处理Imagick异常
return 'Error: ' . $e;
} catch (\Exception $e) {
// 处理其他异常
return 'Error: ' . $e->getMessage();
}
}else{
copy($uploadConfig['savepath'].$attaItem['url'], $newPathName);
$path[] = $newPathName;
$attachIdPathArr[$attaItem['id']][] = $newPathName;
}
}
}catch (Exception $e){
}
/**
* @package pdf文档转换图片
* @param string $filepath pdf文档绝对路径 D:/1.pdf
* @param string $filename 文件夹名 每个pdf创建一个文件夹
* @return array
*/
public function pdf2pngs($pdf,$filename){
$path = ROOT_PATH . "public". DS ."uploads". DS ."img". DS . $filename ; // 图片存放目录
if (!file_exists($path)) {
mkdir($path, 0700, true); //创建目录
chmod($path, 0700); //赋予权限
}
$images = [];
$imagick = new \Imagick();
// 设置图片分辨率
$imagick->setResolution(120, 120);
// 该函数接受单个参数$quality,该参数保存一个表示图像压缩质量的整数值
$imagick->setCompressionQuality(100);
$imagick->readImage($pdf);
foreach ($imagick as $key => $val) {
// 设置图片格式并生成png图片
$val->setImageFormat('png');
// $file = $path . DIRECTORY_SEPARATOR . md5($key.time()) . '.png'; //图片名
$file = $path . DS . md5($key.time()) . '.png'; //图片名
if ($val->writeImage($file) === true) {
$images[] = $file;
}
}
return $images;
}