…nekako mi se čini da puno ovih dana davim
problem ovoga puta je sljedeći:
Radim program koji uploadanu sliku treba obraditi da od nje kreira više različitih slika…tj. cropa izvornu sliku na više djelova.
Da bi cropao sliku u jednom koraku moram napraviti vritual_image iz kojega kasnije cropam djelove:
$virtual_image=imagecreatefrompng($src);
Problem je da online server vrisne:
Allowed memory size of 268435456 bytes exhausted
Prije nego zaključimo da treba više RAM-a, volio bih razumjeti neke stvari.
Pratio sam ponašanje memorye…i koliko vidim, memorija skoči isključivo nakon linije
$virtual_image=imagecreatefrompng($src);
Evo par odnosa za koliku sliku koliko memory usage naraste:
-slika od 5MB, koristit će 22MB RAMA
-slika od 20MB, koristit će 170MB RAMA
-slika od 200MB, koristit će 650MB RAMA
Odnos svakako nije linearan. No posumnjao sam u jednu stvar i napravio sliku od svega
0.15MB koja je zauzela isto 22MB RAM-a koliko i slika od 5MB.
Ono što su te dvije slike imale zajedničko je produkt “width x height”.
Ispada da linija imagecreatefrompng($src) napuca RAM-a u ovisnosti o dimenzije slike koja joj se proslijedi.
Postavlja se pitanje, mora li tome biti tako?
Zašto bi slika od 0.15MB morala zauzeti 22MB RAM-a kako bi se obrađivala?
Postoji li način da cropam sliku bez da radim virtual_image na način kako gore radim?
Hvala na bilo kakvoj sugestiji.