說明:
1.pdf轉圖片通過安裝php擴展imagick實現。
2.由於windows擴展安裝的一系列問題,建議在linux環境開發,windows大伙可以嘗試安裝。
3.為Centos 安裝ImageMagick imagick for php步驟。ImageMagick是一套軟件系列,主要用於圖片的創建、編輯以及轉換等 (安裝方式有多種,本文只介紹一種安裝方式)
(一)安裝步驟:
1. 下載安裝ImageMagick
wget ftp://mirror.aarnet.edu.au/pub/imagemagick/ImageMagick-6.6.8-10.tar.gz tar -xzvf ImageMagick-6.6.8-10.tar.gz ./configure --prefix=/usr/local/imagemagick make make install
2.下載安裝Imagick
地址:http://pecl.php.net/package/imagick
wget http://pecl.php.net/get/imagick-3.1.0RC1.tgz tar -xzvf imagick-3.1.0RC1 phpize ./configure --with-php-config=/usr/local/php/bin/php-config --with-imagick=/usr/local/imagemagick make make install
3.手動配置php.ini
Installing shared extensions: /usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/ Installing header files: /usr/local/php/include/php/ 生成imagick.so到/usr/local/php/lib/php/extensions/no-debug-non-zts-20090626/
至此,php擴展安裝完成。
(二)使用方法
/** * PDF2PNG * @param $pdf 待處理的PDF文件 * @param $path 待保存的圖片路徑 * @param $page 待導出的頁面 -1為全部 0為第一頁 1為第二頁 * @return 保存好的圖片路徑和文件名 * 注:此處為坑 對於Imagick中的$pdf路徑 和$path路徑來說, php版本為5+ 可以使用相對路徑。php7+版本必須使用絕對路徑。所以,建議大伙使用絕對路徑。 */ 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轉化為圖片后拼接方法 */ 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 (!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 生成目錄地址 * 注:生成目錄方法 */ 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; }
調用方法,實現將pdf 轉為圖片 進而拼接圖片的功能~over~