php pdf轉圖片


最近公司做一個附件管理,需要上傳pdf轉圖片,上網查了一大堆資料,順利的安裝好,並轉圖片成功,中間也走過很多坑,所以記錄下來,供大家參考。

安裝imagick擴展之前先要了解下ImageMagick和ghostscript 的關系:
在這里插入圖片描述

1、安裝編譯工具

yum install wget make gcc gcc-c++ gtk±devel zlib-devel openssl openssl-devel pcre-devel kernel keyutils patch perl

2、安裝ghostscript

wget http://downloads.ghostscript.com/public/ghostscript-9.02.tar.gz
tar zxf ghostscript-9.02.tar.gz
cd ghostscript-9.02
./configure
make
make install

3、安裝ImageMagick

cd /usr/local/src #進入軟件包存放目錄
wget http://www.imagemagick.org/download/ImageMagick.tar.gz #下載ImageMagick
tar zxvf ImageMagick.tar.gz #解壓
cd ImageMagick-6.7.9-3 #進入安裝目錄
./configure --prefix=/usr/local/imagemagick #配置
make #編譯
make install #安裝
export PKG_CONFIG_PATH=/usr/local/imagemagick/lib/pkgconfig/ #設置環境變量

4、安裝imagick

cd /usr/local/src
wget http://pecl.php.net/get/imagick-3.0.1.tgz #下載imagick
tar zxvf imagick-3.0.1.tgz
cd imagick-3.0.1
/usr/bin/phpize #用phpize生成configure配置文件 這個是我的phpize路徑,可以用whereis phpize查看
./configure --with-php-config=/usr/bin/php-config --with-imagick=/usr/local/imagemagick #配置 php-config路徑同上查看方式
make #編譯
make install #安裝

5、php加載imagick擴展

#vi /etc/php.ini
extension=“imagick.so”
#:wq! #保存退出

6、重新加載php-fpm

#service php-fpm reload
如果是apache 則 #service httpd restart

7、測試

  1. 在代碼中phpinfo();
  2. 命令行中 php -m
    都可以查看到是否安裝成功擴展,有imagick說明安裝成功

可能出現的錯誤

  1. 我之前安裝過很多次都提示安裝失敗,安裝完imagick后沒有任何提示,從網上搜索了一下,還有一種方法安裝,通過pecl安裝imagick擴展,代碼如下:
    pecl install imagick

  2. 在安裝過程中出現錯誤,一般是由於缺少編譯工具包導致,可根據提示參照第一步安裝相應的工具包即可,可能還需要安裝libpng,libjpeg

  3. 安裝好了,可能pdf轉的圖片格式也不是都可以轉的,需要進入imagick目錄,用命令行查看一下可以轉的格式支不支持,命令如下:
    convert -list format
    沒有對應的格式就需要重新安裝版本了

  4. 安裝好了,需要pdf轉圖片,代碼如下


下面展示一些 代碼片

 private function _pdf2png($pdf,$path){
        if(!extension_loaded('imagick')){
            return false;
        }
        if(!file_exists($pdf)){
            return false;
        }
        $image = new Imagick();
        $image->setResolution( 300, 300 );
        $image->setcompressionquality(100);
        $image->readimage($pdf);
        $pages = count($image);
        if($pages == 0){
            return false;
        }
        FoxCommon::createdir(Yii::app()->params['staticPath'] . $path);
        foreach ($image as $k => $v){
            $v->setImageFormat( "jpg" );
            $fileName = $path . '/' . $k . '.jpg';
            $filePath = Yii::app()->params['staticPath'] . '/' .$fileName;
            if(file_exists($filePath)){
                $files[] = $fileName;
            }else{
                if($v->writeImage($filePath) == true){
                    $files[] = $fileName;
                };
            }
        }
        return $files;
    }

后來上傳到線上,實際使用中發現,上傳10兆以上的文件,轉圖片就很慢了,而且服務器Imagick沒轉圖片成功會占用很多磁盤空間,就算轉成功了一個圖片也2到3兆,太大了,后來一查是圖片轉的質量的問題,下面兩段代碼的問題:

$image->setResolution( 300, 300 ); // 設置圖像分辨率
$image->setcompressionquality(100); // 設置對象的默認壓縮質量

將上面兩段代碼改外

$image->setResolution( 80, 80 ); // 設置圖像分辨率
//$image->setcompressionquality(100); // 設置對象的默認壓縮質量不設置,一個介於1和100之間的整數,1 =高壓縮,100=低壓縮,也可以根據自己的實際情況來

改完后轉十幾兆的pdf就很快了,幾秒鍾就行了,而且轉出來的圖片就幾百K,圖片的質量還是可以的,至此就大功告成了。

ps:有興趣的可以關注下我的公眾號和小程序,謝謝啦~~
在這里插入圖片描述在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM