VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > PHP >
  • PHP中使用imagick实现把PDF转成图片

这篇文章主要介绍了PHP中使用imagick实现把PDF转成图片,本文着重讲解了2个错误的处理,特别是GhostScript错误,需要的朋友可以参考下

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

Warning

This function is currently not documented; only its argument list is available.

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

  1. <?php 
  2. Header("Content-type: image/jpeg");    
  3. /** 
  4. * 缩小图片尺寸. 
  5. * 
  6. * @param $image 待处理的二进制图片 
  7. * @param $width 处理后图片尺寸的宽度(px) 
  8. * @param $height 处理后图片尺寸的高度(px) 
  9. * @param $crop 是否裁剪图片 
  10. * 
  11. * @return 处理好的二进制图片 
  12. */ 
  13. function resize($image$width$height$crop
  14.    $imagick = new Imagick($image); 
  15.    $w = $imagick->getImageWidth(); 
  16.    $h = $imagick->getImageHeight(); 
  17.    if ($w > $width || $h > $height
  18.    { 
  19.       if ($crop
  20.       { 
  21.          $imagick->cropThumbnailImage($width$height); 
  22.       } 
  23.       else 
  24.       { 
  25.          $imagick->resizeImage($width$height, Imagick::FILTER_LANCZOS, 1, true); 
  26.       } 
  27.    } 
  28.    $processed_image = $imagick->getImageBlob(); 
  29.    return $processed_image
  30. $s=resize("123.jpg", 60, 40, 1); 
  31. echo $s
  32. ?> 

但我要用这个扩展做的,是将PDF转成PNG,PDF哦!代码如下:

  1. <?php 
  2. /** 
  3. * PDF2PNG 
  4. * @param $pdf  待处理的PDF文件 
  5. * @param $path 待保存的图片路径 
  6. * @param $page 待导出的页面 -1为全部 0为第一页 1为第二页 
  7. * @return      保存好的图片路径和文件名 
  8. */ 
  9.  function pdf2png($pdf,$path,$page=-1) 
  10. {  
  11.    if(!extension_loaded('imagick')) 
  12.    {  
  13.        return false;  
  14.    }  
  15.    if(!file_exists($pdf)) 
  16.    {  
  17.        return false;  
  18.    }  
  19.    $im = new Imagick();  
  20.    $im->setResolution(120,120);  
  21.    $im->setCompressionQuality(100); 
  22.    if($page==-1)   
  23.       $im->readImage($pdf); 
  24.    else 
  25.       $im->readImage($pdf."[".$page."]"); 
  26.    foreach ($im as $Key => $Var
  27.    {  
  28.        $Var->setImageFormat('png');  
  29.        $filename = $path."/". md5($Key.time()).'.png'
  30.        if($Var->writeImage($filename) == true) 
  31.        {  
  32.            $Return[] = $filename;  
  33.        }  
  34.    }  
  35.    return $Return;  
  36. }  
  37. $path="images";//请确保当前目录下有这个文件夹,由于一直要用,所以就不加检测了 
  38. $s=pdf2png("test.pdf",$path); 
  39. $scount=count($s); 
  40. for($i=0;$i<$scount;$i++) 
  41.    echo "<div align=center><font color=red>Page&nbsp;".($i+1)."</font><br><a href=\"".$s[$i]."\" target=_blank><img border=3 height=120 width=90 src=\"".$s[$i]."\"></a></div><p>"
  42. ?> 

跟上面的差不多吧?可是总是不成功,readImage那边异常了,查看错误输出:

PHP Fatal error:  Uncaught exception 'ImagickException' with message 'PostscriptDelegateFailed `test.pdf': No such file or directory'

百度谷歌了好久,最后灵机一动,不是说Postscript么?我找,我装。

这个Postscript,其实是GhostScript。

装好后,一跑,OK啦!

原文链接:http://www.phpfensi.com/php/20210508/15125.html

 


相关教程