2012-11-01 104 views
2

真的要砸我的大腦,我一直在尋找這個2天以上。目錄中的GD圖像批處理

目標?點擊/選擇一個包含圖像的子目錄;在提交時,將使用GD在所選的整個DIR上運行批處理過程,在同一臺服務器上的/ thumbs文件夾中創建大拇指。

狀態?我可以一次爲單個文件執行此操作,但需要一次執行多個文件。

這是我運作一次性代碼:

$filename = "images/r13.jpg"; 

list($width,$height) = getimagesize($filename); 

$width_ratio = 166/$width; 
if ($height * $width_ratio <= 103) 
{ 
    $adjusted_width = 166; 
    $adjusted_height = $height * $width_ratio; 
} 
else 
{ 
    $height_ratio = 103/$height; 
    $adjusted_width = $width * $height_ratio; 
    $adjusted_height = 103; 
} 

$image_p = imagecreatetruecolor(166,103); 
$image = imagecreatefromjpeg($filename); 
imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width)/2),ceil((103 - $adjusted_height)/2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height); 

imagejpeg($image_p,"images/thumbs/r13.jpg",70); 

正如你所看到的,該腳本靶向一個單一的文件,我想通過目錄遍歷指定名稱代替。

(我也會看看ImageMagick的,但目前它不是一個選項。)

我會繼續經歷SO等,但任何幫助將是巨大的。

謝謝。

回答

3

你需要從這個代碼做一個函數:

function processImage($filename){ 
    list($width,$height) = getimagesize($filename); 

    $width_ratio = 166/$width; 
    if ($height * $width_ratio <= 103) 
    { 
     $adjusted_width = 166; 
     $adjusted_height = $height * $width_ratio; 
    } 
    else 
    { 
     $height_ratio = 103/$height; 
     $adjusted_width = $width * $height_ratio; 
     $adjusted_height = 103; 
    } 

    $image_p = imagecreatetruecolor(166,103); 
    $image = imagecreatefromjpeg($filename); 
    imagecopyresampled($image_p,$image,ceil((166 - $adjusted_width)/2),ceil((103 - $adjusted_height)/2),0,0,ceil($adjusted_width),ceil($adjusted_height),$width,$height); 

    imagejpeg($image_p,"images/thumbs/".basename($filename),70); 
    imagedestroy($image_p); 
} 

請注意,這個函數的最後兩行:它通過fiulename寫拇指築底,破壞資源,以釋放內存。

現在目錄應用此的所有文件:

foreach(glob('images/*.jpg') AS $filename){ 
    processImage($filename); 
} 

,基本上就是這樣。

+0

dev-null-dweller,工作完美。謝謝(和R.S)這麼快回復。我是新來的回答 - 我如何將這個問題標記爲回答? –

+0

在答案的左側應該有✅,只需單擊它,它會變成綠色 –

+0

@ dev-null-dweller我試過你的解決方案,並將一些值改爲150像素,然後當我運行它時,它可以工作,但是當我檢查了縮略圖,上面和下面都有這條黑線。原始尺寸大於150,這應該足以將圖像裁剪爲150像素。 – anagnam