本地环境
系统:win11 64位
环境:phpStudy
PHP版本:8.0.2
矿建:laravel
配置扩展
一、安装imageMagick
下载地址:https://imagemagick.org/script/download.php
安装版本:ImageMagick-最新版本-Q16-HDRI-x64-dll
配置环境变量:我的电脑-属性-高级系统设置-环境变量-系统变量-path-编辑-新建-引入安装路径
二、安装ghostscript
下载地址:https://www.ghostscript.com/releases/gsdnld.html
安装版本:gs926w64.exe
配置环境变量:我的电脑-属性-高级系统设置-环境变量-系统变量-path-编辑-新建-引入安装路径\bin
三、下载php_imagick.dll扩展
下载地址:https://pecl.php.net/package/imagick/3.4.4/windows
安装版本:php_imagick-3.4.4-{当前使用的php版本}-nts-vc15-x64
意事项:选择与自身PHP版本相同的下载,如果phpinfo的Thread Safety是disabied选择nts版本,否则选ts版本
四、开启php_imagick.dll扩展
1.把php_imagick.dll文件复制到 ext 目录下(phpstudy-属性-打开 文件所在的位置 -> 返回上一层 -Extensions- php-php8.0.2nts ->ext)
2.把其他.dll文件复制在php根目录下(phpstudy-属性-打开 文件所在的位置 -> 返回上一层 -Extensions- php-php8.0.2nts
3.开启扩展(phpStudy-网站-选择开发的项目-管理-php扩展-勾选imagick)
五、实现代码
1:前端代码
<!DOCTYPE html>
<html>
<head>
<title>注册画面</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- 引入 Bootstrap -->
<!-- HTML5 Shiv 和 Respond.js 用于让 IE8 支持 HTML5元素和媒体查询 -->
<!-- 注意: 如果通过 file:// 引入 Respond.js 文件,则该文件无法起效果 -->
<!--[if lt IE 9]>
<![endif]-->
<style>
</style>
</head>
<body>
<div id="main">
<form class="form-horizontal" role="form" enctype="multipart/form-data" action="/test/savepdf" method="POST">
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<input type="file" name="pdffile">
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-3 col-sm-9">
<input type="submit" value="保存" class="btn btn-primary btn-group-justified">
</div>
</div>
</form>
</div>
<script>
$(function() {
})
</script>
</body>
</html>
<script>
</script>
2:后端代码
Route::any('test/savepdf', 'Teacher\TestController@savePdf');
public function savePdf(Request $request ){
$rootPath = storage_path('app/public');
if ($request->hasFile('pdffile')) {
$file = $request->file('pdffile');
$extension = $file ->getClientOriginalExtension() ;
if(strtolower($extension) != "pdf"){
return 0;
}
$filename = date("YmdHis").'.'.$extension;
$path = $file->storeAs('pdfs', $filename, 'public');
$pdfFilePath =$rootPath."/".$path;
try{
if(!extension_loaded('imagick')){
return 1;
}
if(!file_exists($pdfFilePath)){
return 2;
}
// $outputImage = $rootPath.'/output.png'; // 输出图片文件名
// // 创建Imagick对象
// $imagick = new \Imagick();
// // 从PDF文件读取数据
// $imagick->readImage($pdfFilePath . '[0]'); // 读取第一页,索引从0开始
// //$imagick->readImage($pdfFilePath); // 读取第一页,索引从0开始
//
// // 设置图片格式和质量
// $imagick->setImageFormat('png');
// $imagick->setImageCompressionQuality(100);
// // 写入图片文件
// $imagick->writeImage($outputImage);
// // 清理资源
// $imagick->clear();
// $imagick->destroy();
$IM = new \imagick();
$IM->setResolution(120,120);
$IM->setCompressionQuality(100);
$IM->readImage($pdfFilePath);
foreach ($IM as $Key => $Var){
$Var->setImageFormat('png');
$Filename = $rootPath.'/'.$filename.'_pdfpng_'.$Key.'.png';
if($Var->writeImage($Filename) == true){
$Return[] = $Filename;
}
}
}catch(\Exception $e){
die($e->getMessage());
return $e->getMessage();
}
}
foreach ($Return as $k=>$v){
$item = str_replace($rootPath,"",$v) ;
$Return[$k] = asset("storage".$item);
}
print_r($Return);
die("error") ;
}