我在4月時寫過一個遊戲新聞網站,由於遊戲圖片有時候會刊登一些像大型遊戲的寬寬的出招表圖片,或電話繩般長長的圖片。為免縮圖會變得太長或太寬,我寫CMS的時候就只用了一個上限值,然後在上傳圖片的時候先檢查圖片是縱向還是橫向的,並計算原圖的縱長比。如果是橫向圖就橫向優先,縱向圖就縱向優先,並將上限值套用到優先的一邊,而另一邊就按照縱長比計算出來。
這樣做出錯的可能性很低,而且無論橫圖或直圖都會限制在上限值內(實際上是放在一個正方形內),排在一起也不會太大的難看,所以我沒有將選擇哪個方向優先做成選項。
list($width, $height) = getimagesize($image_file);
$img_ratio = $width / $height; // Obtain the image ratio
$thumbnail_dimension = 100; // or any other value you like
if ($width >= $height) {
//Landscape Image
if ($width > $thumbnail_dimension) {
$new_width = $thumbnail_dimension;
$new_height = round($new_width / $img_ratio);
} else {
$new_width = $width;
$new_height = $height;
}
} else {
//Portrait Image
if ($height > $thumbnail_dimension) {
$new_height = $thumbnail_dimension;
$new_width = round($new_height * $img_ratio);
} else {
$new_width = $width;
$new_height = $height;
}
}
// .... resize picture