2015-07-11 156 views
6

我有一種方法會裁剪圖像,但它保持比例,有時會給我一個長方形的圖像。有沒有辦法讓它固定寬度和高度,同時不偏斜或歪曲圖像?即,120px x 120pxPHP圖像裁剪問題

有關如何修改此方法來做到這一點的任何想法?

注意: maxSize設置爲120px。另外,我從原始圖像中傳遞寬度和高度。

protected function calculateSize($width, $height) { 
    if ($width <= $this->maxSize && $height <= $this->maxSize) { 
     $ratio = 1; 
    } elseif ($width > $height) { 
     $ratio = $this->maxSize/$width; 
    } else { 
     $ratio = $this->maxSize/$height; 
    } 

    $this->newWidth = round($width * $ratio); 
    $this->newHeight = round($height * $ratio); 
} 
+0

啊......所以,你要在同一時間有一個長方形和方形的裁剪圖像_? – 2015-07-11 20:29:01

+0

@HoboSapiens 不,這種方法將返回一個橢圓形的圖像,如果我通過它的圖像是320 x 200或類似的東西。我希望它能夠以固定的寬度和高度(120 x 120)均勻裁剪圖像。 –

+0

@HoboSapiens, 我已更新我的問題。我知道這可能會讓人困惑。 –

回答

1

假設你總是想方維回來了,這個倍增是不是一種選擇,這樣的事情應該工作(除非我失去了一些東西):

protected function calculateSize($width, $height) { 
    if ($height <= $this->maxSize && $width <= $this->maxSize) { 
    $new_height = $new_width = min(array($height, $width)); 
    } 
    else { 
    if ($height > $width) { 
     $variable = 'width'; 
    } 
    else { 
     $variable = 'height'; 
    } 
    if ($$variable <= $this->maxSize) { 
     $new_height = $new_width = $$variable; 
    } 
    else { 
     $new_height = $new_width = min(array($this->maxSize, $$variable)); 
    } 
    } 
    $this->newWidth = $new_width; 
    $this->newHeight = $new_height; 
}