站長資訊網
        最全最豐富的資訊網站

        [PHP+ImageMagick]將PDF轉成圖片(步驟詳解)

        ImageMagick安裝

        ImageMagick是一個免費的創建、編輯、合成圖片的軟件。它可以讀取、轉換、寫入多種格式的圖片。圖片切割、顏色替換、各種效果的應用,圖片的旋轉、組合,文本,直線,多邊形,橢圓,曲線,附加到圖片伸展旋轉。ImageMagick是免費軟件:全部源碼開放,可以自由使用,復制,修改,發布,它遵守GPL許可協議,可以運行于大多數的操作系統,ImageMagick的大多數功能的使用都來源于命令行工具。

        PHP中要使用ImageMagick,需要安裝imagick擴展,imagickgd擴展類似,主要用于圖像處理,但是imagick的功能更強大。下面簡單介紹imagick在兩種常用環境中的安裝方法。

        CentOS 7中安裝

        在CentOS中可以直接使用Yum進行安裝,除了安裝ImageMagick,還要安裝它的兩個依賴ImageMagick-develImageMagick-perl

        yum install -y ImageMagick ImageMagick-devel ImageMagick-perl

        接著使用pecl安裝擴展。找到PHP安裝目錄下的pecl,例如PHP安裝在/usr/local/php74目錄中,則pecl一般在/usr/local/php74/bin目標中,執行命令:

        /usr/local/php74/bin/pecl install imagick

        即可使用pecl自動下載并安裝ImageMagick,最后在php.ini中添加

        extension=imagick.so

        即可啟用擴展。

        如果你需要檢查一下擴展有沒有安裝成功,可以執行一下命令

        php -m|grep imagick

        如果輸出imagick,說明擴展安裝成功。


        題外話 :如果你不知道PHP使用的是哪個php.ini配置文件,可以執行一下以下命令

        php74 -i|grep ini

        找到”Loaded Configuration File”那行,就知道PHP使用的是哪個配置文件了。php -i命令
        作用類似于我們使用phpinfo()函數查看PHP的相關信息。


        Docker安裝

        容器中的PHP安裝擴展,推薦使用Github上的docker-php-extension-installer,這是一個Shell腳本,可以幫我們解決擴展的依賴問題,安裝擴展后還會自動清除沒用的文件。我們只需要在Dockerfile中加入這個腳本即可,下面是官方的示例:

        FROM php:7.2-cli # 從Github上下載docker-php-extension-installer腳本 ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/ # 添加可執行權限并安裝擴展 RUN chmod +x /usr/local/bin/install-php-extensions &&      install-php-extensions gd xdebug imagick

        這樣構建出來的鏡像就安裝好所需要的擴展了。


        題外話:在國內網絡環境下,使用docker-php-extension-installer安裝擴展經常會出現超時問題,建議使用外網的VPS構建鏡像,上傳到DockerHub或者其它私有倉庫后,再拉到本地網絡使用。可使用便宜的良心云,或者Vultr這種支持按時計費的VPS。


        PDF轉圖片

        代碼示例:

        // 實例化imagick對象 $im = new imagick(); $im->setResolution(150, 150); $im->setCompressionQuality(100); $im->readImageBlob($fileContent); $im->setImageFormat('jpg'); $im->setImageBackgroundColor('white'); $im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);  header("Content-type: image/jpeg"); echo $im->getImageBlob();

        代碼解讀:

        $im->setResolution(150, 150);

        用于設置圖像的分辨率。這個函數并不改變圖像的實際分辨率,只是在讀取或創建圖像之前將其設置在Imagick對象中,這個函數需要在讀取圖像或創建圖像之前調用。
        這個函數接收兩個參數,分別是橫向分辨率和縱向分辨率,默認值是72*72。為了保持圖像的寬高比,這兩個參數值應該一樣,默認值轉換出來的圖像不夠清晰,建議使用兩倍或三倍值,但同時圖片的大小也會變大。


        $im->setCompressionQuality(100);

        設置圖像的壓縮質量,默認值為0;傳入的參數值應為1-100,對于JPG格式圖片,值越小,圖像體積越小,同時清晰度也較低;但是對于PNG圖片,這個結論貌似不成立,當值小于90時,圖片體積反而越大,所以在轉換為PNG圖片格式時,保持默認值即可。


        $im->readImageBlob($fileContent);

        直接加載PDF文件的二進制內容,也可以使用readImage($filename)函數讀取保存好的PDF文件。


        $im->setImageFormat('jpg');

        設置要生成的圖像的格式,如jpg,png等,


        $im->setImageBackgroundColor('white'); $im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);

        設置圖像背景色為白色,去掉圖像的alpha通道,將所有圖像合并為一層,如果不執行這些操作,轉換出來的圖像背景會是黑色的,如下圖:

        [PHP+ImageMagick]將PDF轉成圖片(步驟詳解)


        header("Content-type: image/png"); echo $im->getImageBlob();

        獲取轉換生成圖像的二進制數據,輸出到客戶端供下載;如果需要保存到文件,可以使用writeImage($filename)函數。

        推薦:《PHP視頻教程》

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 久久精品国产精品青草| 久久青青草原精品国产软件| 国内精品久久久久久久久| 国产成人精品日本亚洲网站| 欧美精品人人做人人爱视频| 87国产私拍福利精品视频| 久久精品a亚洲国产v高清不卡| 精品人妻伦九区久久AAA片69 | 国产成人精品a视频一区 | 黑人巨大精品欧美一区二区| 国产精品久久成人影院| 久久久国产精品亚洲一区| 亚洲国产成人乱码精品女人久久久不卡| 亚洲精品欧美日韩| 国产成人精品福利网站在线| 久久亚洲精品成人av无码网站| 亚州日韩精品专区久久久 | 亚洲国产精品无码一线岛国| 欧美日韩专区麻豆精品在线 | 2021国产精品视频网站| 久久99国产精品久久99果冻传媒| 国产精品无码一区二区三级| 日韩精品久久久久久久电影蜜臀| 中文字幕亚洲精品无码| 午夜精品久久久久久影视777| 欧美成人精品一区二区综合| 久久精品国产清自在天天线| 久久精品国产精品亚洲艾草网美妙| 国产成人精品午夜福麻豆| 999久久久国产精品| 成人国产精品秘 果冻传媒在线| 91午夜精品亚洲一区二区三区| 久久久精品一区二区三区| 柠檬福利精品视频导航| 91精品国产福利在线观看| 99R在线精品视频在线播放| 国产精品免费久久久久久久久 | 欧美日韩人妻精品一区二区在线 | 2022国产精品最新在线| 99久久精品免费看国产| 97久久精品人人澡人人爽|