zl程序教程

您现在的位置是:首页 >  后端

当前栏目

PHP中使用imagick实现把PDF转成图片

PHPPDF 实现 使用 图片 转成 imagick
2023-06-13 09:15:42 时间

PHPManual里,对imagick的描述,真的是简洁,每个成员函数,点击打开就看到如下文本:

复制代码代码如下:

Warning
Thisfunctioniscurrentlynotdocumented;onlyitsargumentlistisavailable.

刚才解决了PHP加载问题后,对图片的处理相当方便,网上随便找了一段:
复制代码代码如下:

<?php
Header("Content-type:image/jpeg");   
/**
*缩小图片尺寸.
*
*@param$image待处理的二进制图片
*@param$width处理后图片尺寸的宽度(px)
*@param$height处理后图片尺寸的高度(px)
*@param$crop是否裁剪图片
*
*@return处理好的二进制图片
*/
functionresize($image,$width,$height,$crop)
{
  $imagick=newImagick($image);
  $w=$imagick->getImageWidth();
  $h=$imagick->getImageHeight();
  if($w>$width||$h>$height)
  {
     if($crop)
     {
        $imagick->cropThumbnailImage($width,$height);
     }
     else
     {
        $imagick->resizeImage($width,$height,Imagick::FILTER_LANCZOS,1,true);
     }
  }
  $processed_image=$imagick->getImageBlob();
  return$processed_image;
}
$s=resize("123.jpg",60,40,1);
echo$s;
?>

但我要用这个扩展做的,是将PDF转成PNG。PDF哦!
复制代码代码如下:
<?php
/**
*PDF2PNG
*@param$pdf 待处理的PDF文件
*@param$path待保存的图片路径
*@param$page待导出的页面-1为全部0为第一页1为第二页
*@return     保存好的图片路径和文件名
*/
 functionpdf2png($pdf,$path,$page=-1)

  if(!extension_loaded("imagick"))
  { 
      returnfalse; 
  } 
  if(!file_exists($pdf))
  { 
      returnfalse; 
  } 
  $im=newImagick(); 
  $im->setResolution(120,120); 
  $im->setCompressionQuality(100);
  if($page==-1)  
     $im->readImage($pdf);
  else
     $im->readImage($pdf."[".$page."]");
  foreach($imas$Key=>$Var)
  { 
      $Var->setImageFormat("png"); 
      $filename=$path."/".md5($Key.time()).".png";
      if($Var->writeImage($filename)==true)
      { 
          $Return[]=$filename; 
      } 
  } 
  return$Return; 

$path="images";//请确保当前目录下有这个文件夹,由于一直要用,所以就不加检测了
$s=pdf2png("test.pdf",$path);
$scount=count($s);
for($i=0;$i<$scount;$i++)
{
  echo"<divalign=center><fontcolor=red>Page ".($i+1)."</font><br><ahref=\"".$s[$i]."\"target=_blank><imgborder=3height=120width=90src=\"".$s[$i]."\"></a></div><p>";
}
?>

跟上面的差不多吧?可是总是不成功,readImage那边异常了,查看错误输出:
复制代码代码如下:
PHPFatalerror: Uncaughtexception"ImagickException"withmessage"PostscriptDelegateFailed`test.pdf":Nosuchfileordirectory"

百度谷歌了好久,最后灵机一动,不是说Postscript么?我找,我装。
这个Postscript,其实是GhostScript。
装好后,一跑,OK啦!