PHP pdf格式文件转png图片
2021-01-26 23:16
标签:@param tmp linu creat 导出 创建失败 mamicode move fun pdf转图片是通过php扩展imagick实现的,所以前提条件是已经安装imagick拓展。 pdf转图片: 遇到问题:提示无权限,解决方法(Linux):修改「/etc/ImageMagick-6/」目录下的policy.xml文件,开通「读写pdf文件」的权限。(sudo vim policy.xml)
多张png图片转一张: 删除文件夹及文件夹内所有文件: PHP pdf格式文件转png图片 标签:@param tmp linu creat 导出 创建失败 mamicode move fun 原文地址:https://www.cnblogs.com/sgm4231/p/13225253.html/**
* PDF2PNG
* @param $pdf 待处理的PDF文件
* @param $path 待保存的图片路径
* @param int $page 待导出的页面 -1为全部 0为第一页 1为第二页
* @return array|bool 保存好的图片路径和文件名
* @throws \ImagickException
* 注:此处为坑 对于Imagick中的$pdf路径 和$path路径来说, php版本为5+ 可以使用相对路径。php7+版本必须使用绝对路径。所以,建议大伙使用绝对路径。
*/
public function pdf2png($pdf, $path, $page = -1)
{
if (!extension_loaded(‘imagick‘)) {
return false;
}
if (!file_exists($pdf)) {
return false;
}
if (!is_readable($pdf)) {
return false;
}
$im = new Imagick();
$im->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 $path 待保存的图片路径
* @return string 将多个图片拼接为成图的路径
* 注:多页的pdf转化为图片后拼接方法
*/
/**
* @param array $imgs
* @param string $img_path
* @return bool|string
*/
public function Spliceimg($imgs = array(), $img_path = ‘‘)
{
//自定义宽度
$width = 1230;
//获取总高度
$pic_tall = 0;
foreach ($imgs as $key => $value) {
$info = getimagesize($value);
$pic_tall += $width / $info[0] * $info[1];
}
// 创建长图
$temp = imagecreatetruecolor($width, $pic_tall);
//分配一个白色底色
$color = imagecolorAllocate($temp, 255, 255, 255);
imagefill($temp, 0, 0, $color);
$target_img = $temp;
$source = array();
foreach ($imgs as $k => $v) {
$source[$k][‘source‘] = Imagecreatefrompng($v);
$source[$k][‘size‘] = getimagesize($v);
}
$num = 1;
$tmp = 1;
$tmpy = 2; //图片之间的间距
$count = count($imgs);
for ($i = 0; $i $count; $i++) {
imagecopy($target_img, $source[$i][‘source‘], $tmp, $tmpy, 0, 0, $source[$i][‘size‘][0], $source[$i][‘size‘][1]);
$tmpy = $tmpy + $source[$i][‘size‘][1];
//释放资源内存
imagedestroy($source[$i][‘source‘]);
}
$returnfile = $img_path . date(‘Y-m-d‘);
if (!file_exists($returnfile)) {
if (!$this->make_dir($returnfile)) {
/* 创建目录失败 */
return false;
}
}
$return_imgpath = $returnfile . ‘/‘ . md5(time() . $pic_tall . ‘pdftopng‘) . ‘.png‘;
imagepng($target_img, $return_imgpath);
return $return_imgpath;
}
/**
* make_dir
* @param string $folder 生成目录地址
* 注:生成目录方法
*/
/**
* @param $folder
* @return bool
*/
public function make_dir($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;
}
/**
* 删除文件夹及其文件夹下所有文件
* @param $dirName
* @return bool
*/
public function removeDir($dirName)
{
if (!is_dir($dirName)) {
return false;
}
$handle = @opendir($dirName);
while (($file = @readdir($handle)) !== false) {
//判断是不是文件 .表示当前文件夹 ..表示上级文件夹 =2
if ($file != ‘.‘ && $file != ‘..‘) {
$dir = $dirName . ‘/‘ . $file;
is_dir($dir) ? $this->removeDir($dir) : @unlink($dir);
}
}
closedir($handle);
@rmdir($dirName);
}
上一篇:【HTML篇】2.HTML的head标签和body标签
下一篇:Linux安装Tomcat-Nginx-FastDFS-Redis-Solr-集群——【第十一集补充:修改fastdfs的http.conf文件进行防盗链,重启nginx失败】