2015-07-11 22 views
6

Tôi có một phương pháp sẽ cắt hình ảnh nhưng nó duy trì tỷ lệ và đôi khi mang lại cho tôi hình ảnh thuôn dài. Có cách nào nó cố định chiều rộng và chiều cao trong khi không nghiêng hoặc che hình ảnh? tức là, 120px x 120px?Vấn đề về hình ảnh PHP

Bất kỳ ý tưởng nào về cách sửa đổi phương pháp này để thực hiện điều đó?

Lưu ý: maxSize được đặt thành 120px. Ngoài ra, tôi đang vượt qua chiều rộng và chiều cao từ hình ảnh gốc.

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

Ah ... Vì vậy, bạn muốn để có một hình ảnh bị cắt vừa tròn và vừa vuông góc cùng một lúc? –

+0

@HoboSapiens Không, phương pháp này sẽ trả về hình ảnh thuôn dài nếu tôi chuyển hình ảnh đó có kích thước 320 x 200 hoặc hình như thế. Tôi muốn nó trả lại hình ảnh được cắt đồng đều ở độ rộng cố định và chiều cao như 120 x 120. –

+0

@HoboSapiens, Tôi đã cập nhật câu hỏi của mình. Tôi biết điều đó có thể gây nhầm lẫn như thế nào. –

Trả lời

1

Giả sử bạn luôn muốn kích thước vuông trở lại, và upscaling đó không phải là một lựa chọn, một cái gì đó như thế này nên làm việc (trừ khi tôi đang thiếu một cái gì đó):

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; 
} 
Các vấn đề liên quan