2011-09-09 35 views
9

Tôi đang tạo kịch bản để thay đổi kích thước hình ảnh trong Symfony2.Chuyển đổi hình ảnh thành chuỗi (đối với Symfony2 Response)

Như tôi muốn để có thể sử dụng hệ thống phản ứng Symfony2 tiêu chuẩn ...

$headers = array('Content-Type'  => 'image/png', 
       'Content-Disposition' => 'inline; filename="image.png"'); 

return new Response($img, 200, $headers); // $img comes from imagecreatetruecolor() 

... Tôi cần một chuỗi để gửi đi như một phản ứng. Thật không may, các chức năng như imagepng chỉ ghi tệp hoặc xuất trực tiếp lên trình duyệt chứ không phải trả về chuỗi.

Cho đến nay các giải pháp duy nhất mà tôi đã có thể nghĩ đến là

1] lưu hình ảnh vào một vị trí tạm thời và sau đó đọc nó một lần nữa

imagepng($img, $path); 
return new Response(file_get_contents($path), 200, $headers); 

2] sử dụng đầu ra đệm

ob_start(); 
imagepng($img); 
$str = ob_get_contents(); 
ob_end_clean(); 

return new Response($str, 200, $headers); 

Có cách nào tốt hơn không?

+2

tôi khuyên bạn nên sử dụng [ImagineBundle] (https://github.com/avalanche123/AvalancheImagineBundle). Theo tôi, đó là một gói thực sự tốt đẹp cho bất kỳ loại thao tác hình ảnh nào. Mặc dù chỉ có một bộ lọc (tạo hình thu nhỏ), bạn có thể viết các gói của riêng bạn. Chỉ cần nghĩ rằng tôi muốn chia sẻ tìm thấy của tôi với bạn :) – gilden

+0

@ gilden, tôi sẽ xem xét nó, cảm ơn! – Czechnology

Trả lời

6

Đệm đầu ra có lẽ là giải pháp tốt nhất.

BTW bạn có thể gọi một ít chức năng:

ob_start(); 
imagepng($img); 
$str = ob_get_clean(); 
Các vấn đề liên quan