首頁  >  文章  >  後端開發  >  [PHP+ImageMagick]將PDF轉成圖片(步驟詳解)

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

藏色散人
藏色散人轉載
2022-01-19 16:44:505788瀏覽

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视频教程

以上是[PHP+ImageMagick]將PDF轉成圖片(步驟詳解)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:learnku.com。如有侵權,請聯絡admin@php.cn刪除