PHP PDF转换成图片,并拼接到一张图上

这里把这个整理成一个帮助类了,希望能帮到大家。

setResolution(150,150);$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;}}//返回转化图片数组,由于pdf可能多页,此处返回二维数组。return $Return;}/*** spliceimg* @param array $imgs pdf转化png  路径* @param string $img_path* @return string 将多个图片拼接为成图的路径* 注:多页的pdf转化为图片后拼接方法* @internal param string $path 待保存的图片路径*/static function spliceImg($imgs = array(),$img_path = ''){$width = 500; //自定义宽度$height = null;$pic_tall = 0;//获取总高度foreach ($imgs as $key => $value) {$arr = getimagesize($value);$height = $width/$arr[0]*$arr[1];$pic_tall += $height;}$pic_tall = intval($pic_tall);// 创建长图$targetImg = imagecreatetruecolor($width,$pic_tall);//分配一个白色底色$color = imagecolorAllocate($targetImg,255,255,255);imagefill($targetImg,0,0,$color);$tmp  = 0;$tmpy = 0; //图片之间的间距$src = null;$size = null;foreach ($imgs as $k => $v) {$src = Imagecreatefrompng($v);$size = getimagesize($v);//5.进行缩放imagecopyresampled($targetImg,$src, $tmp, $tmpy,0,0,$width,$height,$size[0],$size[1]);//imagecopy($targetImg, $src, $tmp, $tmpy, 0, 0, $size[0],$size[1]);$tmpy = $tmpy + $height;//释放资源内存imagedestroy($src);unlink($imgs[$k]);}$returnfile = $img_path.date('Y-m-d');if (!file_exists($returnfile)){if (!self::makeDir($returnfile)){/* 创建目录失败 */return false;}}$return_imgpath = $returnfile.'/'.md5(time().$pic_tall.'pdftopng').'.png';imagepng($targetImg,$return_imgpath);return $return_imgpath;}/*** makeDir* @param string $folder 生成目录地址* 注:生成目录方法* @return bool*/static function makeDir($folder){$reval = false;if (!file_exists($folder)){/* 如果目录不存在则尝试创建该目录 */@umask(0);/* 将目录路径拆分成数组 */preg_match_all('/([^\/]*)\/?/i', $folder, $atmp);/* 如果第一个字符为/则当作物理路径处理 */$base = ($atmp[0][0] == '/') ? '/' : '';/* 遍历包含路径信息的数组 */foreach ($atmp[1] AS $val){if ('' != $val){$base .= $val;if ('..' == $val || '.' == $val){/* 如果目录为.或者..则直接补/继续下一个循环 */$base .= '/';continue;}}else{continue;}$base .= '/';if (!file_exists($base)){/* 尝试创建目录,如果创建失败则继续循环 */if (@mkdir(rtrim($base, '/'), 0777)){@chmod($base, 0777);$reval = true;}}}}else{/* 路径已经存在。返回该路径是不是一个目录 */$reval = is_dir($folder);}clearstatcache();return $reval;}
}

调用

  // 把pdf转成png,并拼接图片(兼容ios预览无法显示签章问题)$imgArr = Handler::pdfToPng($path,$_SERVER['DOCUMENT_ROOT'].'/file/');$img = '';if($imgArr&&is_array($imgArr)){$img = Handler::spliceImg($imgArr,$_SERVER['DOCUMENT_ROOT'].'/file/agreement/');}

 


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部