說明:
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~
