在 ServBay 中使用內建的 Imagick PHP 模組
ServBay 作為一套強大且易用的本地 Web 開發環境,預先整合了多款實用的 PHP 擴充套件,其中包括強大的影像處理模組 Imagick。Imagick 是一套廣泛應用於 PHP 領域的擴充套件,架構於功能強大的 ImageMagick 函式庫之上,能為開發者帶來豐富的影像建立、編輯及處理能力。透過 ServBay,開發者無需處理繁瑣的編譯與設定,只要安裝即可在 PHP 專案裡輕鬆使用 Imagick。
本文將引導您掌握 Imagick 模組在 ServBay 的使用方式,內容涵蓋其功能特性、在 ServBay 中的啟用狀態確認,以及如何於 PHP 專案內發揮圖像處理效能。
Imagick 模組介紹
Imagick 是一款物件導向的 PHP 擴充套件,封裝了 ImageMagick 函式庫的各式能力。ImageMagick 本身是開放原始碼軟體組合,能以點陣圖格式建立、編輯、合成、轉換圖像。Imagick 讓 PHP 開發者能直接於程式中調用 ImageMagick 強大的圖像處理功能。
Imagick 的核心功能
- 支援多元圖像格式: 支援超過 200 種常見及專業圖像格式,如 JPEG、PNG、GIF、TIFF、PDF、SVG 等。
- 豐富的圖像處理操作: 提供多樣化的處理方法,包括但不限於:
- 調整尺寸、縮放、裁切、旋轉、翻轉。
- 添加浮水印、文字、邊框。
- 調整顏色、亮度、對比度、飽和度。
- 套用濾鏡(模糊、銳化、藝術特效等)。
- 進行格式轉換。
- 處理影像序列(如動態 GIF)。
- 高效能表現: 採用 ImageMagick 的底層最佳化,確保運算效能。
- 物件導向 API: 直觀易用的物件導向介面,方便程式整合與維護。
ServBay 對 Imagick 的支援
ServBay 的設計初衷,是簡化本地開發環境的建立與管理。因此,ServBay 在其整合的各個 PHP 版本裡,都已預先安裝 Imagick 模組,且預設即啟用。這表示,大多數 ServBay 使用者無需額外安裝或設定,就能直接開始用 Imagick 開發影像功能。
ServBay 所整合的 Imagick 版本會依據 ServBay 平台及所選用的 PHP 版本而有所差異,但通常都是對應 PHP 相容的最新穩定版本。您可透過 phpinfo()
函式檢查版本細節與 Imagick 設定狀態。
如何確認 Imagick 已啟用
在 ServBay 裡,Imagick 模組預設即啟用。如需確認其狀態或檢視進階設定,請依照下列步驟:
- 建立
phpinfo()
檔案: 請於 ServBay 網站根目錄下(如/Applications/ServBay/www/servbay.demo
或自定義網站路徑)建立名為info.php
的檔案。php<?php phpinfo(); ?>
1
2
3 - 存取
info.php
: 透過瀏覽器打開您的網站網址,例如http://servbay.demo/info.php
。 - 查找 Imagick 資訊: 在開啟的
phpinfo()
頁面中,往下捲動或善用瀏覽器內的搜尋功能(多為Cmd + F
或Ctrl + F
),搜尋「imagick」。若 Imagick 已正確載入與啟用,將會在頁面中看到「imagick」專屬設定區塊,詳細列出模組版本與相關選項。
若成功找到 Imagick 區塊,代表模組運作正常。
在 PHP 程式中使用 Imagick
確認 Imagick 模組已啟用後,您即可在 ServBay 環境下的 PHP 專案內直接調用 Imagick 類別與方法,進行圖像處理。
前置條件
- 已安裝並啟動 ServBay。
- 已於 ServBay 裡設定專屬網站(像是
servbay.demo
),而且其 PHP 版本啟用了 Imagick(預設如此)。 - 您的 PHP 專案檔案已放在 ServBay 網站根目錄(如
/Applications/ServBay/www/servbay.demo/your-project
)。
範例:圖像處理操作
以下提供一個運用 Imagick 處理圖像的小範例。此範例會讀取名為 test.png
的圖片,執行縮圖、加框、建立反射效果,並將原圖與生成的反射合成到新畫布上,最後輸出結果圖。
請將下列程式碼儲存為 .php
檔案(如 image_process.php
),放在 ServBay 網站任一公開目錄,並確保同目錄裡有一張名為 test.png
的圖像以供測試。
<?php
// 確認 Imagick 擴充套件已經載入
if (!extension_loaded('imagick')) {
die('Imagick extension is not loaded.');
}
$imagePath = 'test.png'; // 請確保檔案和此程式在同一目錄
// 檢查來源圖檔是否存在
if (!file_exists($imagePath)) {
die('Source image file not found: ' . $imagePath);
}
try {
/* 讀取影像 */
$im = new Imagick($imagePath);
/* 產生縮圖:寬度 200 像素,高度等比例縮放 */
// 使用 thumbnailImage 維持原比例縮圖
$im->thumbnailImage(200, null);
/* 加上邊框 */
$im->borderImage(new ImagickPixel("white"), 5, 5);
/* 複製圖片並生成反射效果 */
$reflection = $im->clone();
$reflection->flipImage(); // 垂直翻轉形成反射
/* 建立從透明到黑色的漸層圖 */
// 漸層需夠大以容納反射及邊框
$gradientWidth = $reflection->getImageWidth();
$gradientHeight = $reflection->getImageHeight();
$gradient = new Imagick();
// 利用 pseudo image 製作漸層
$gradient->newPseudoImage($gradientWidth, $gradientHeight, "gradient:transparent-black");
/* 將漸層合成於反射圖產生淡出效果 */
// COMPOSITE_DSTOUT 能用漸層 alpha 進行遮罩
// 或可用 COMPOSITE_OVER 搭配 alpha(依 ImageMagick 版本)
// 本例直接使用 COMPOSITE_OVER 達到簡易淡出
$reflection->compositeImage($gradient, imagick::COMPOSITE_OVER, 0, 0);
// 註:如需更細緻透明度設定,請依 ImageMagick/Imagick 版本調整相關方法
// $reflection->setImageOpacity(0.3); // 例如設定整體透明度
/* 建立新畫布以容納原圖與反射圖 */
$canvasWidth = $im->getImageWidth() + 40; // 加入邊距
$canvasHeight = $im->getImageHeight() + $reflection->getImageHeight() + 30; // 原圖高 + 反射高 + 間距 + 上下邊距
$canvas = new Imagick();
// 建立黑色底的新影像
$canvas->newImage($canvasWidth, $canvasHeight, new ImagickPixel("black"));
$canvas->setImageFormat("png"); // 設定輸出格式
/* 將原圖與反射圖依序合成於畫布 */
// 原圖置於畫布上方,20px 左邊距與 10px 上邊距
$canvas->compositeImage($im, imagick::COMPOSITE_OVER, 20, 10);
// 反射圖置原圖下方,距畫布 20px 與 10px 間距
$canvas->compositeImage($reflection, imagick::COMPOSITE_OVER, 20, $im->getImageHeight() + 10 + 10);
/* 設定 HTTP 標頭並輸出圖片 */
header("Content-Type: image/png");
echo $canvas;
// 釋放資源
$im->clear();
$im->destroy();
$reflection->clear();
$reflection->destroy();
$gradient->clear();
$gradient->destroy();
$canvas->clear();
$canvas->destroy();
} catch (ImagickException $e) {
// 捕捉 Imagick 錯誤並顯示訊息
die("Imagick Error: " . $e->getMessage());
} catch (Exception $e) {
// 捕捉其他例外
die("An error occurred: " . $e->getMessage());
}
?>
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
只要將 image_process.php
和 test.png
一併放於 ServBay 網站公共目錄,經由瀏覽器直接訪問(如 http://servbay.demo/image_process.php
),即可看到處理後的結果圖像。
提示:
- 請確認您的 PHP 程式對影像來源既能讀取、亦能進行處理。在 ServBay 環境下,通常不會有權限問題。
- 若需更進階的影像運算,推薦參閱 Imagick 官方 PHP 文件 以及 ImageMagick 官方文件。
常見問題 (FAQ)
Q: 如果 ServBay 上 Imagick 預設未啟用怎麼辦?
A: 在最新的 ServBay 版本中,所有支援 PHP 版本均預設安裝且啟用 Imagick。如在 phpinfo()
中發現未載入,請先確認所用為最新版 ServBay。若問題未解,建議於 ServBay 管理面板切換 PHP 版本再切回,或試著重啟 ServBay 服務。若依然無效,請參考 ServBay 官方說明或社群支援。
Q: 是否需要另外安裝 ImageMagick 套件?
A: 不需要。ServBay 已內建 Imagick PHP 擴充及必要的 ImageMagick 函式庫,無需再另行安裝 ImageMagick。
Q: Imagick 支援哪些影像格式?
A: Imagick 支援 ImageMagick 函式庫所涵蓋的全部格式,主要如 JPEG、PNG、GIF、TIFF、PDF、SVG 等共逾 200 種。可透過 Imagick 物件的 queryFormats()
方法查詢目前 ServBay 所支援格式列表。
結論
ServBay 藉由預設安裝並啟用 Imagick 模組,大幅簡化 PHP 開發者於本地進行圖像處理的環境安裝與設定流程。讓您可立即充分發揮 Imagick 多元且強大的功能,處理各式影像需求,無需再浪費時間處理複雜的安裝步驟。搭配 ServBay 對多 PHP 版本及各類 Web 開發技術的支援,Imagick 成為 ServBay 生態圈中不可或缺的利器,助您打造功能齊全的 Web 應用服務。