前一陣子忽然覺得所謂的「廣色域」影像比較好,所以改用 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,所以這時候我們要稍微修改一下程式碼:
@@ -472,7 +472,7 @@ function ime_im_cli_check_executable($fullpath) {
if (!is_executable($fullpath))
return false;
- @exec('"' . $fullpath . '" --version', $output);
+ @exec($fullpath . ' --version', $output);
return count($output) > 0;
}
@@ -547,7 +547,7 @@ function ime_im_cli_resize( $old_file, $new_file, $width, $height, $crop, $resiz
$geometry = $width . 'x' . $height;
// limits are 150mb and 128mb
- $cmd = "\"$cmd\" \"$old_file\" -limit memory 157286400 -limit map 134217728 -resize $geometr
+ $cmd = "$cmd $old_file -limit memory 157286400 -limit map 134217728 -resize $geometry";
if ($crop) {
// '^' is an escape character on Windows
$cmd .= (ime_is_windows() ? '^^' : '^') . " -gravity center -extent $geometry";
@@ -561,7 +561,7 @@ function ime_im_cli_resize( $old_file, $new_file, $width, $height, $crop, $resiz
if ( $resize_mode == 'size' )
$cmd .= ' -strip';
- $cmd .= ' "' . $new_file . '"';
+ $cmd .= ' ' . $new_file ;
exec($cmd);
return file_exists($new_file);
@@ -1075,4 +1075,4 @@ function ime_option_page() {
</div>
\ No newline at end of file
+?>
改好之後應該可以 Test path 成功。下面 Optimize for 欄位有三種設定:Quality, Size, None (use WP instead). Quality 和 Size 的差別主要是加上 -strip
參數,會把 profile, comment 等等資訊從圖片檔移除,原先的目標就是要解決圖片 ICC 的問題,所以所有縮圖模式都要選 Quality 才行。
最後將 Enable enhanced image engine 勾選即可。
Enterpr1se
2013/11/12你好,想請問你知如何令 ImageMagick 支援 auto rotate 嗎?
我知加上 auto-orient 就可以了不過在那一行加呢?
另外 WP3.5 說已經 default 使用 ImageMagick ,想問如何知是否使用中
http://make.wordpress.org/core/2012/12/06/wp_image_editor-is-incoming/
Enterpr1se
2013/11/12請問你知如何令 ImageMagicK 支援 exif rotate 嗎?