Jak wczytać obrazek do zmiennej php


Pierwszym moim wpisem na blogu będzie rozwiązanie problemu z zapisem do zmiennej obrazu. Oczywiście problemu jest banalny jak mamy gotowy plik ze zdjęciem zapisany na dysku. Wystarczy użyć funkcji file_get_contents i po sprawie ale co w przypadku gdy obrazek został chwilę wcześniej wygenerowany np. za pomocą imagecreate. Taką sytuację postaram się poniżej wyjaśnić.


Na wstępie wspomnę że oczywiście można wygenerować obrazek zapisać na dysk a następnie pobrać ale to rozwiązanie nie każdemu będzie odpowiadać. Osobiście z opisywaną sytuacją spotkałem się podczas generowania plików PDF z wygenerowanym obrazkiem. Obrazek sam w sobie był nie potrzeby dlatego zapisywanie go na dysku byłoby niepotrzebną operacja ponadto po pewnym czasie trzeba by go usunąć żeby zwolnić niepotrzebnie zużyte miejsce.

Dobrze a więc do rzeczy, tworzymy sobie przykładowy obrazek i wypełniamy kolorem.

$image = imagecreate(100, 100);

$background = imagecolorallocate($image, 0, 0, 0);

Następnie aby utworzyć z niego plik JPG trzeba użyć funkcji imagejpeg ale za jej pomocą możemy jedynie wygenerować plik lub wysłać obrazek do przeglądarki.

Tutaj z pomocą przychodzi ob_start czyli włączenie bufora danych wyjściowych. W efekcie od tego momentu żadne dane nie są wysyłane tylko będą przechowywane w buforze.

Wystarczy więc użyć imagejpeg tak jakbyśmy chcieli wysłać obrazek do przeglądarki a następnie użyć ob_get_contents aby zapisać zawartość bufora do zmiennej. Ostatnią operacją jest zamknięcie i wyczyszczenie bufora ob_end_clean i już możemy korzystać z obrazka.

Cały kod powyższego przykładu wygląda następująco:

$image = imagecreate(100, 100);

$background = imagecolorallocate($image, 0, 0, 0);

ob_start();

imagepng($image);

$stringdata = ob_get_contents();

ob_end_clean();

return $stringdata;

nazwa.pl