V prípade, že pracujete s obrázkami cez PHP skript využívajúci GD knižnicu, môžete aj pri spracúvaní relatívne malého obrázku dostať podobné hlásenie: „Fatal error: Out of memory“ alebo „Error: Exceed Memory limit. Require: xx xx MByte “, ale obrázok je veľký len 1MB.
Ako je to možné, keď memory limit je vo väčšine prípadov väčšie ako spracovávaný obrázok? Vysvetlenie je nasledovné:
Vytvoríme obrázok s veľkosťou 640 x 480 (VGA rozlíšenie - väčšinou úplne postačujúce na webové stránky) a otvorte ho v nejakom prehliadači obrázkov - napríklad IrfanView.
Dolný okraj (informácie o obrázku) budú vyzerať asi takto:
Obrázok zaberá na disku (veľkosť súboru) 5.30 KB, ale v pamäti 900.04 KB
Teraz zväčšíme rozlíšenie 1024 x 768. Dostaneme nasledujúce hodnoty:
Veľkosť obrázku je stále 5.30 KB ale v pamäti zaberá 2.25 MB
Ako to vyzerá v rozlíšení 4 megapixelového fotoaparátu (2304 x 1728):
Potrebná veľkosť pamäte je už 11.39 MB
A nakoniec 7.1 Mpx fotoaparát:
Obrázok zaberá v pamäti 20.25 MB ale veľkosť je stále 5.30 KB.
Ako je to možné? JPG, PNG (a iné kompresné formáty) zmenšujú veľkosť súboru, ale pre jeho úpravu je stále pre každý pixel potrebná rovnaká časť pamäte (teda čím viac pixelov, tým viac pamäte je pre úpravu obrázku potrebné). Z toho vyplýva, že množstvo potrebnej pamäte nezáleží len na veľkosti súboru.
GD knižnica, pracuje s obrázkami veľmi podobne ako ako klasické programy na úpravu obrázkov typu Photoshop, Paintshop atď pre veľmi orientačné výsledky môžeme pre výpočet spotreby pamäte použiť tento vzorec:
výška x šírka x 8 (bitov) x 3 (farebné kanály) / 8 x 1.65
Ak používate WordPress a veľmi populárne galérie NextGEN, potom môžete z jej administračného rozhrania zistiť aktuálne využívanú pamäť pre Vašu aplikáciu (v tomto prípade wordpress a jeho všetky pluginy)
Teraz sa pozrite na „memory limit“ (na našich zdieľaných serveroch väčšinou ide o 32M). Potom si už môžete spočítať sami, ako veľké rozlíšenie obrázkov si môžete dovoliť. Z hľadiska zaťaženia servera je najideálnejšie mať fotografie už upravené v optimálnom rozlíšení (max. 600 - 700px na dlhšiu stranu) a nechať skript robiť len náhľady.