讓 WordPress 改用 ImageMagick 引擎縮圖

前一陣子忽然覺得所謂的「廣色域」影像比較好,所以改用 AdobeRGB 取代原本的 sRGB 來儲存圖片,後來甚至用更廣域的 ProPhoto RGB,圖片上傳到 Flickr,所產生的縮圖並沒有 Color space 的問題,但如果上傳到 WordPress,內建的 php-GD 並沒辦法正確的處理 ICC profile,所以照片縮圖後全部變成「去飽和」的模樣。

最簡單的解決方式當然是把要上傳的照片全部轉成 sRGB 輸出,還可以順便兼顧 IE8 之前的版本不支援 ICC 色彩管理的問題,但總覺得應該可以有更理想的處理方式吧!

就目前的版本,GD 沒辦法處理 ICC profile,所以把目標轉到另一套影像處理引擎 — ImageMagick。所幸 Clinton Agency 已經寫好一套 WordPress Plugin: ImageMagick Engine,它可以讓 WP 改用 ImageMagick 來取代 GD。

環境說明

目前的主機架在 Synology NAS (DS213+) 上,內建的 php 是 5.3.21 版,ImageMagick 是 6.7.6 版,Wordpress 是 3.5.1 版。ImageMagick Engine 為 1.5.0 版。

設定

安裝的方式與其他 plugin 相同,從 Plugins -> Add New 搜尋 ImageMagick Engine 即可。

Synology 本身有提供 Command-line interface (CLI) 版的 ImageMagick,但沒有 php module,目前也查不到什麼比較好的安裝方式,所以只好使用 CLI 的模式。其路徑在 /usr/syno/bin,必須把它加到 open_basedir 這個 php 設定裡。DSM 系統中把這個設定從 php.ini 獨立出來,放在 /usr/syno/etc/php/user-setting.ini 裡。

進入 plugin 的設定,先將 Image engine 指定為 command line,再將 /usr/syno/bin 填入 ImageMagick path 裡。

如果之前 open_basedir 設定沒有錯誤,此時點選 “Test path” 按鈕應該可以顯示成功才對,但發生了神秘的錯誤,看 log 居然是 path: no found. 再 trace code,發現是程式碼裡的路徑被加入了 ” (quot) 符號,而在預設的 safe_mode 模式下運行時,所有 exec() 的 command 都會自動被 escapeshellcmd()1,所以這時候我們要稍微修改一下程式碼:

改好之後應該可以 Test path 成功。下面 Optimize for 欄位有三種設定:Quality, Size, None (use WP instead). Quality 和 Size 的差別主要是加上 -strip 參數,會把 profile, comment 等等資訊從圖片檔移除,原先的目標就是要解決圖片 ICC 的問題,所以所有縮圖模式都要選 Quality 才行。

最後將 Enable enhanced image engine 勾選即可。


2 Comments

Leave a Reply