PHP使用imagick读取PDF生成png缩略图的两种方法

kevin.Zhu 发布于:2013-1-16 15:35 分类:Php  有 20 人浏览,获得评论 0 条  

这篇文章主要介绍了PHP使用imagick读取PDF第一页生成png缩略图的两种方法,使用了PHP扩展php_imagick,需要的朋友可以参考下

一、ImageMagick是什么
ImageMagick是一套功能强大、稳定而且免费的工具集和开发包,可以用来读、写和处理超过185种基本格式的图片文件,包括流行的TIFF, JPEG, GIF, PNG, PDF以及PhotoCD等格式。利用ImageMagick,你可以根据web应用程序的需要动态生成图片, 还可以对一个(或一组)图片进行改变大小、旋转、锐化、减色或增加特效等操作,并将操作的结果以相同格式或其它格式保存。


二、php_imagick什么
一个可以供PHP调用ImageMagick功能的PHP扩展。使用这个扩展可以使PHP具备和ImageMagick相同的功能。


三、PDF生成png缩略图的两种方法
第一种:


/**

* PDF2PNG   

* @param $pdf  待处理的PDF文件

* @param $path 待保存的图片路径

* @param $page 待导出的页面 -1为全部 0为第一页 1为第二页

* @return      保存好的图片路径和文件名

*/

 function pdf2png($pdf,$path,$page=0)

{  

   if(!is_dir($path))

   {

       mkdir($path,true);

   }

   if(!extension_loaded('imagick'))

   {  

     echo '没有找到imagick!' ;

     return false;

   }  

   if(!file_exists($pdf))

   {  

      echo '没有找到pdf' ;

       return false;  

   }  

   $im = new Imagick();  

   $im->setResolution(120,120);   //设置图像分辨率

   $im->setCompressionQuality(80); //压缩比

   $im->readImage($pdf."[".$page."]"); //设置读取pdf的第一页

   //$im->thumbnailImage(200, 100, true); // 改变图像的大小

   $im->scaleImage(200,100,true); //缩放大小图像

   $filename = $path."/". time().'.png';

   if($im->writeImage($filename) == true)

   {  

      $Return  = $filename;  

   }  

   return $Return;  

}  

$s = pdf2png('file/1371273225-ceshi_ppt.pdf','images'); 

echo '<div align="center"><img src="'.$s.'"></div>';









第二种:


function pdf2png($PDF,$Path){

   if(!extension_loaded('imagick')){

     return false;

   }

   if(!file_exists($PDF)){

     return false;

   }

   $IM = new imagick();

   $IM->setResolution(120,120);

   $IM->setCompressionQuality(100);

   $IM->readImage($PDF);

   foreach ($IM as $Key => $Var){

     $Var->setImageFormat('png');

     $Filename = $Path.'/'.md5($Key.time()).'.png';

     if($Var->writeImage($Filename) == true){

       $Return[] = $Filename;

     }

   }

   return $Return;

}


PS: debian系统安装相关软件   

apt-get install imagemagic  php5-imagick


第一种方式已经使用过, 测试成功  , 要注意检查第二个参数目录的权限 可写。