2014-11-12 46 views
9

Tôi muốn thay đổi kích thước hình ảnh của mình thông qua chức năng hình ảnh can thiệp trong Laravel 4, nhưng để giữ tỷ lệ khía cạnh của một hình ảnh, đây là những gì mã của tôi trông giống như:can thiệp tỉ lệ hình ảnh

$image_make   = Image::make($main_picture->getRealPath())->fit('245', '245', function($constraint) { $constraint->aspectRatio(); })->save('images/articles/'.$gender.'/thumbnails/245x245/'.$picture_name); 

Vấn đề là doesn này không giữ tỉ lệ hình ảnh của tôi, cảm ơn.

+0

'fit()' phải giữ tỷ lệ tự động. Vì vậy, không cần sự ràng buộc. Tôi đề nghị bạn cũng vượt qua chiều cao và chiều rộng dưới dạng số và không phải là chuỗi. Nếu không tôi thấy không có gì sai ở đây ... – lukasgeiter

+0

@ lukasgeiter Tôi có nghĩa là thay đổi kích thước() không giữ tỷ lệ khung hình (xin lỗi), fit() giữ tỉ lệ khung hình nhưng nó cắt một phần của hình ảnh quan trọng đối với tôi ... – sk4yb3n

+0

Vì vậy kết quả mong đợi của bạn chính xác là gì? nếu tỷ lệ không khớp với tỷ lệ mục tiêu? – lukasgeiter

Trả lời

15

Nếu bạn cần thay đổi kích thước trong giới hạn, bạn nên sử dụng resize không fit. Nếu bạn cũng cần tập trung những hình ảnh bên trong những hạn chế, bạn nên tạo một mới canvas và chèn hình ảnh thay đổi kích cỡ trong đó:

// This will generate an image with transparent background 
// If you need to have a background you can pass a third parameter (e.g: '#000000') 
$canvas = Image::canvas(245, 245); 

$image = Image::make($main_picture->getRealPath())->resize(245, 245, function($constraint) 
{ 
    $constraint->aspectRatio(); 
}); 

$canvas->insert($image, 'center'); 
$canvas->save('images/articles/'.$gender.'/thumbnails/245x245/'.$picture_name); 
+0

Câu trả lời hay. Đây chính xác là những gì tôi cần để giữ cho tất cả các hình thu nhỏ của tôi nhất quán về kích thước. Cảm ơn bạn! – Merlevede

8

Chỉ cần thay đổi kích thước chiều rộng tối đa/chiều cao của hình ảnh, và làm cho phù hợp với vải chiều rộng tối đa & chiều cao mong muốn

Image::make($main_picture->getRealPath())->resize(245, 245, 
    function ($constraint) { 
     $constraint->aspectRatio(); 
    }) 
->resizeCanvas(245, 245) 
->save('images/articles/'.$gender.'/thumbnails/245x245/'.$picture_name, 80); 
Các vấn đề liên quan