2011-09-09 11 views
9

Buduję skrypt do zmiany rozmiaru obrazu w Symfony2.Konwertuj obraz na ciąg znaków (dla odpowiedzi Symfony2)

Ponieważ chciałbym, aby móc korzystać ze standardowego systemu reagowania Symfony2 ...

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

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

... Muszę ciąg wysłać jako odpowiedź. Niestety, funkcje takie jak imagepng zapisują pliki lub dane wyjściowe bezpośrednio do przeglądarki, a nie zwracają ciągów.

jak dotąd jedynym rozwiązania udało mi się wymyślić są

1] zapisać obraz do tymczasowej lokalizacji, a następnie odczytać je ponownie

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

2] użyć buforowania wyjścia

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

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

Czy istnieje lepszy sposób?

+2

Polecam używanie [ImagineBundle] (https://github.com/avalanche123/AvalancheImagineBundle). Moim zdaniem to naprawdę fajny pakiet do wszelkiego rodzaju manipulacji obrazem. Mimo że jest wyposażony tylko w jeden filtr (tworzenie miniatur), możesz napisać własne pakiety. Pomyślałem, że podzielę się z tobą moim odkryciem :) – gilden

+0

@gilden, przyjrzę to, dzięki! – Czechnology

Odpowiedz

6

Buforowanie wyjściowe jest prawdopodobnie najlepszym rozwiązaniem.

BTW można nazwać jeden mniej funkcję:

ob_start(); 
imagepng($img); 
$str = ob_get_clean();