2015-07-11 15 views
6

Mam metodę, która przycina obraz, ale zachowuje proporcje i czasami daje mi podłużny obraz. Czy istnieje sposób na ustalenie szerokości i wysokości, a jednocześnie nie skręcanie lub zniekształcanie obrazu? tj., 120px x 120px?PHP Image Crop Issue

Jakieś pomysły dotyczące modyfikacji tej metody, aby to zrobić?

Uwaga: Maksymalny rozmiar jest ustawiony na 120px. Dodatkowo przechodzę na szerokość i wysokość od oryginalnego obrazu.

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

Ach ... Więc chcesz mieć przycięty obraz, który jest jednocześnie podłużny i kwadratowy w tym samym czasie? –

+0

@HoboSapiens Nie, ta metoda zwróci podłużny obraz, jeśli przekażę mu obraz o rozdzielczości 320 x 200 lub coś podobnego. Chcę, aby zwrócił obraz, który jest przycięty równomiernie na ustalonej szerokości i wysokości, jak 120 x 120. –

+0

@HoboSapiens, Zaktualizowałem moje pytanie. Wiem, jak to mogło być mylące. –

Odpowiedz

1

Zakładając, że zawsze chce wymiary kwadratowych wrócił i że skalowanie nie jest opcją, coś jak to powinno działać (chyba, że ​​czegoś mi brakuje):

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; 
}