茫茫網海中的冷日 - 對這文章發表回應
茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1729034 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00188.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

對這文章發表回應

發表限制: 非會員 可以發表

發表者: 冷日 發表時間: 2009/5/7 9:02:23

強大的圖片處理工具ImageMagick

一直聽說 ImageMagick,但今天因為需要做一個縮略圖,所以特意瞭解一下ImageMagick。

以前的站點有使用ImageMagick,可以作為PHP的dll使用,也可以用命令行的方式調用。有windows和linux等各個平台的版本,所以要用起來真的是非常方便!不作為PHP的dll,也可以通過exec調用,那更加的不錯,對於喜歡命令行做處理的人,那是相當的方便。

剛開始就想著投入到各個參數的瞭解當中,一片的英文,搞的我頭暈,看來強硬的英文水平是做技術的一個前提了,呵呵。

我想做的就是一個事情,把圖片做縮略圖,關鍵是等比縮小,取中間的部分作為圖片文件。於是剛剛開始就想著看看有哪些參數是幹嘛的,ImageMagick提供太多的功能了,以至於我這類人要瞭解完還真難,瞭解了幾個關鍵參數 -resize -crop,但用這個一步做不出圖片來,而且在windows下面還有部分命令有點問題,比如輸入:

convert aslibra.com.jpg -resize 100x100^ www.aslibra.com.jpg

沒有得到如期的效果,應該是每個邊都大於100,後來知道是需要用引號括起來,windows下還必須是雙引號,但是第一階段做了個讀取圖片寬高,實現該功能的函數:


//by hqlulu @ www.aslibra.com
function img_resize($file,$output,$w=0,$h=0,$method="resize",$center=true){

 if(!$w && !$h)return false;

 $tmp_file = "tmp_resize.jpg";
 if($method == "crop"){

   if($center){
     //先調整大小
     $wh = getimagesize($file);

     if(!$wh[0] || !$wh[1])return false;
     if(!$w || !$h)return false;
     
     if($wh[0]/$wh[1] >= $w/$h){
       img_resize($file,$tmp_file,0,$h);
     }else{
       img_resize($file,$tmp_file,$w,0);
     }
     $file = $tmp_file;
   }
   $c = " -gravity Center ";
   $m = " $c -$method {$w}x{$h}+0+0 ";
 }else{
   if($w && $h){
     $m = " -$method {$w}x{$h} ";
   }else if($w && !$h){

     $m = " -$method {$w} ";
   }else if(!$w && $h){
     $m = " -$method x{$h} ";
   }
 }
 $cmd = "convert $file $m $output";
 exec($cmd,$out);
}

後來看了一下usage,裡面有很多很多的示例,太棒了,簡直一個photoshop的教程:
http://www.imagemagick.org/Usage/

也發現了前面不能實現的功能的原因,同時發現了一句話完成我的需求的方法:

convert www.aslibra.com.jpg  -thumbnail "100x100^" -gravity center -extent 100x100  center.gif

函數可以精簡一下了,並且可以加上一個縮略圖的截取部分的比例:



function img_resize($file,$output,$w=0,$h=0,$method="resize",$percent=0){

// == usage ==
//resize by w : img_resize($file,$output,100)
//resize by h : img_resize($file,$output,0,100)
//resize by w&h : img_resize($file,$output,100,100)

//crop by w&h : img_resize($file,$output,100,100,'crop')
//crop by w&h&percent : img_resize($file,$output,100,100,'crop',0.8)
//
//2008-8-14
//by hqlulu
//www.aslibra.com
//
 if(!$w && !$h)return false;

 if($method == "crop"){
   if($percent){
     $w1=intval($w/$percent);
     $h1=intval($h/$percent);
     $m = " -thumbnail \"{$w1}x{$h1}^\" -gravity center -extent {$w}x{$h} ";
   }else{
     $m = " -thumbnail \"{$w}x{$h}^\" -gravity center -extent {$w}x{$h} ";
   }
 }else{
   if($w && $h){
     $m = " -$method {$w}x{$h} ";

   }else if($w && !$h){
     $m = " -$method {$w} ";
   }else if(!$w && $h){
     $m = " -$method x{$h} ";
   }
 }
 $cmd = "convert $file $m $output";
 exec($cmd,$out);
}


另外,如果有CMYK的圖片,那可以做個強制顏色空間
-colorspace RGB

這個功能就完成了!

以下是原圖和每個命令方式對應的結果:



convert 0.jpg -resize 100 1.jpg



convert 0.jpg -resize x100 2.jpg




convert 0.jpg -resize 100x100 3.jpg



convert 0.jpg  -thumbnail "100x100^" -gravity center -extent 100x100  4.jpg



convert 0.jpg  -thumbnail "150x150^" -gravity center -extent 100x100  5.jpg




原文出處:強大的圖片處理工具ImageMagick - 阿權的書房 - 技術經驗分享,資料收集,偶爾晾幾張相片,感言生活
本篇最重要得關鍵在:
如果有CMYK的圖片,那可以做個強制顏色空間
-colorspace RGB 
內容圖示
url email imgsrc image code quote
樣本
bold italic underline linethrough   












 [詳情...]
validation picture

注意事項:
預覽不需輸入認證碼,僅真正發送文章時才會檢查驗證碼。
認證碼有效期10分鐘,若輸入資料超過10分鐘,請您備份內容後,重新整理本頁並貼回您的內容,再輸入驗證碼送出。

選項

Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|