您好,登錄后才能下訂單哦!
這篇文章將為大家詳細(xì)講解有關(guān)PHP+ImageMagick如何將PDF轉(zhuǎn)成圖片,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
ImageMagick是一個免費的創(chuàng)建、編輯、合成圖片的軟件。它可以讀取、轉(zhuǎn)換、寫入多種格式的圖片。圖片切割、顏色替換、各種效果的應(yīng)用,圖片的旋轉(zhuǎn)、組合,文本,直線,多邊形,橢圓,曲線,附加到圖片伸展旋轉(zhuǎn)。ImageMagick是免費軟件:全部源碼開放,可以自由使用,復(fù)制,修改,發(fā)布,它遵守GPL許可協(xié)議,可以運行于大多數(shù)的操作系統(tǒng),ImageMagick的大多數(shù)功能的使用都來源于命令行工具。
PHP中要使用ImageMagick,需要安裝imagick
擴展,imagick
與gd
擴展類似,主要用于圖像處理,但是imagick
的功能更強大。下面簡單介紹imagick
在兩種常用環(huán)境中的安裝方法。
在CentOS中可以直接使用Yum
進(jìn)行安裝,除了安裝ImageMagick
,還要安裝它的兩個依賴ImageMagick-devel
和ImageMagick-perl
。
yum install -y ImageMagick ImageMagick-devel ImageMagick-perl
接著使用pecl
安裝擴展。找到PHP安裝目錄下的pecl
,例如PHP安裝在/usr/local/php74
目錄中,則pecl
一般在/usr/local/php74/bin
目標(biāo)中,執(zhí)行命令:
/usr/local/php74/bin/pecl install imagick
即可使用pecl
自動下載并安裝ImageMagick
,最后在php.ini
中添加
extension=imagick.so
即可啟用擴展。
如果你需要檢查一下擴展有沒有安裝成功,可以執(zhí)行一下命令
php -m|grep imagick
如果輸出imagick
,說明擴展安裝成功。
題外話 :如果你不知道PHP使用的是哪個php.ini
配置文件,可以執(zhí)行一下以下命令
php74 -i|grep ini
找到”Loaded Configuration File”那行,就知道PHP使用的是哪個配置文件了。php -i
命令
作用類似于我們使用phpinfo()
函數(shù)查看PHP的相關(guān)信息。
容器中的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/ # 添加可執(zhí)行權(quán)限并安裝擴展 RUN chmod +x /usr/local/bin/install-php-extensions && \ install-php-extensions gd xdebug imagick
這樣構(gòu)建出來的鏡像就安裝好所需要的擴展了。
題外話:在國內(nèi)網(wǎng)絡(luò)環(huán)境下,使用docker-php-extension-installer
安裝擴展經(jīng)常會出現(xiàn)超時問題,建議使用外網(wǎng)的VPS構(gòu)建鏡像,上傳到DockerHub或者其它私有倉庫后,再拉到本地網(wǎng)絡(luò)使用??墒褂帽阋说牧夹脑疲蛘遃ultr這種支持按時計費的VPS。
// 實例化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);
用于設(shè)置圖像的分辨率。這個函數(shù)并不改變圖像的實際分辨率,只是在讀取或創(chuàng)建圖像之前將其設(shè)置在Imagick對象中,這個函數(shù)需要在讀取圖像或創(chuàng)建圖像之前調(diào)用。
這個函數(shù)接收兩個參數(shù),分別是橫向分辨率和縱向分辨率,默認(rèn)值是72*72。為了保持圖像的寬高比,這兩個參數(shù)值應(yīng)該一樣,默認(rèn)值轉(zhuǎn)換出來的圖像不夠清晰,建議使用兩倍或三倍值,但同時圖片的大小也會變大。
$im->setCompressionQuality(100);
設(shè)置圖像的壓縮質(zhì)量,默認(rèn)值為0;傳入的參數(shù)值應(yīng)為1-100,對于JPG格式圖片,值越小,圖像體積越小,同時清晰度也較低;但是對于PNG圖片,這個結(jié)論貌似不成立,當(dāng)值小于90時,圖片體積反而越大,所以在轉(zhuǎn)換為PNG圖片格式時,保持默認(rèn)值即可。
$im->readImageBlob($fileContent);
直接加載PDF文件的二進(jìn)制內(nèi)容,也可以使用readImage($filename)
函數(shù)讀取保存好的PDF文件。
$im->setImageFormat('jpg');
設(shè)置要生成的圖像的格式,如jpg
,png
等,
$im->setImageBackgroundColor('white'); $im->setImageAlphaChannel(Imagick::ALPHACHANNEL_REMOVE); $im->mergeImageLayers(Imagick::LAYERMETHOD_FLATTEN);
設(shè)置圖像背景色為白色,去掉圖像的alpha通道,將所有圖像合并為一層,如果不執(zhí)行這些操作,轉(zhuǎn)換出來的圖像背景會是黑色的,如下圖:
header("Content-type: image/png"); echo $im->getImageBlob();
獲取轉(zhuǎn)換生成圖像的二進(jìn)制數(shù)據(jù),輸出到客戶端供下載;如果需要保存到文件,可以使用writeImage($filename)
函數(shù)。
1、執(zhí)行速度快。2、具有很好的開放性和可擴展性。3、PHP支持多種主流與非主流的數(shù)據(jù)庫。4、面向?qū)ο缶幊蹋篜HP提供了類和對象。5、版本更新速度快。6、具有豐富的功能。7、可伸縮性。8、功能全面,包括圖形處理、編碼與解碼、壓縮文件處理、xml解析等。
關(guān)于“PHP+ImageMagick如何將PDF轉(zhuǎn)成圖片”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。