Autor | Zpráva | ||
---|---|---|---|
ondra256 Profil |
#1 · Zasláno: 10. 2. 2017, 10:11:09
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 |
#3 · Zasláno: 10. 2. 2017, 11:01:00
blaaablaaa:
Nevynásobil jsi to nechtěně čtyřma dvakrát? co jsi uvedl vycházi: 79 902 480 B |
||
pcmanik Profil |
#4 · Zasláno: 10. 2. 2017, 11:56:11
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 |
#5 · Zasláno: 10. 2. 2017, 13:46:24
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). |
||
Časová prodleva: 6 let
|
0