Autor Zpráva
ondra256
Profil
Zdravím,

na svém hostingu mám k dispozici 256 MB RAM.
Moje aplikace spotřebuje přibližně 25 MB RAM.

Když však potřebuju uložit obrázky tak aplikace spadne na chybě: allowed memory size exhausted, z důvodu nedostatku paměťi.

Obrázek zabírá 3,8 MB místa na disku a má rozlišení 5970 x 3346 px.


Obrázek zpracovávám následovně:
1) Načtu si ho z disku
2) Načtu si vodoznak z disku
3) Vložím vodoznak do obrázku
4) Uložím na disk nový obrázek

Moje otázka zní. Je možné aby zpracování takového obrázku zabralo v paměti více než 225 MB (25 MB zabere samotná aplikace bez zpracování)?

Lze nějak spočítat (alespoň orientačně) kolik místa v paměti obrázek zabere?

Díky s pozdravem


Ondřej Krajčík
blaaablaaa
Profil
ondra256:
GD si, pokud vim, ulozi cely obrazek do pameti po pixelech (vzdy RGB+alpha), takze takovy obrazek by mel v pameti zabrat 5970 * 3346 * 4 = 79 902 480 B
ondra256
Profil
blaaablaaa:
Nevynásobil jsi to nechtěně čtyřma dvakrát?
co jsi uvedl vycházi: 79 902 480 B
pcmanik
Profil
ondra256:
Použi ImageMagick namiesto GD. Spotrebovaná pamäť ImageMagick-u sa nezapočítava do PHP limitu a ako plus má prehľadnejšie a oveľa mocnejšie API.
blaaablaaa
Profil
ondra256:
Vynasobil, upravim v odpovedi :D
davex
Profil *
Ve skutečnosti zaberou obrázky při zpracování GD knihovnou paměti ještě o něco víc.

Pro RGB obrázky se používá vzorec:
výška * šířka * 3 * 1.8

Pro obrázek o velikosti 5970 x 3346 px tedy:
5970 * 3346 * 3 * 1.8 = 107868348 B = 103 MB

Při vkládání vodotisku stačí vyrobit kopii a už je zabraný dvojnásobek paměti.

Viz Nejčastější potíže s PHP (FAQ) » Allowed memory size... (Překročení paměti).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: