Egy kisméretű képfájl megnyitásakor jóval több memóriát használhat, mint amennyit a fájl a meghajtón foglal. A szerkesztéshez előállított képpontadat méretét a szélesség, a magasság, a csatornák száma és a csatornánkénti bitmélység határozza meg. A tömörített fájl hossza további tényezőktől függ, ezért a kettőt külön számold.
A képpontadat alapképlete
Nyers bájtszám = szélesség × magasság × csatornák száma × bitmélység / 8.
A szélesség és a magasság pixelben értendő. A bitmélység itt egyetlen csatornára vonatkozik. Egy 8 bites RGB kép három csatornája összesen 24 bitet, vagyis 3 bájtot jelent pixelenként. Egy külön áttetszőségi, azaz alfa-csatornával négy csatorna és 4 bájt adódik.
A W3C PNG specifikációja megkülönbözteti a színmintákat, a mintánkénti bitmélységet és az alfa-csatornát. A böngészőben gyakori, csatornánként 8 bites RGBA képpontadatot az MDN ImageData dokumentációja is leírja. A számítás a képpontok adatára vonatkozik; az alkalmazás teljes memóriaigénye ezen felül alakul.
Szemléltető példa: 4 000 × 3 000 pixel
A képpontok száma 4 000 × 3 000 = 12 000 000, vagyis 12 megapixel. Három, egyenként 8 bites csatornával:
12 000 000 × 3 × 8 / 8 = 36 000 000 bájt.
Ez 36 MB, bináris egységben 36 000 000 / 1 048 576 = 34,33 MiB. A két kijelzés ugyanazt az adatmennyiséget írja le eltérő egységben; az adatmennyiség-átváltóban ellenőrizheted.
| Képpontadat | Bájt/pixel | Nyers méret |
|---|---|---|
| RGB, 8 bit/csatorna | 3 | 36 MB |
| RGBA, 8 bit/csatorna | 4 | 48 MB |
| RGB, 16 bit/csatorna | 6 | 72 MB |
A 16 bites csatornák ebben a példában kétszer annyi bájtot igényelnek, mint a 8 bitesek. A „16 bites kép” megnevezés önmagában ezért pontatlan lehet: ellenőrizd, hogy csatornánkénti vagy összesített mélységről beszélnek.
Mindkét oldal felezése negyedannyi pixelt ad
Ha a képet 2 000 × 1 500 pixelre méretezed, a pixelszám 3 000 000-re csökken. Változatlan, 8 bites RGB tárolással ez 9 000 000 bájt, az eredeti 36 MB negyede.
A különbség azért ekkora, mert a két méret egymással szorzódik: 0,5 × 0,5 = 0,25. Ha csak a szélességet feleznéd változatlan magasság mellett, a pixelszám a felére csökkenne, közben a képarány is módosulna. Átméretezés előtt ezért a kívánt pixelméretet és a képarány megőrzését együtt határozd meg.
Miért nem jósolható meg ebből a JPEG vagy PNG mérete?
A tömörítés kihasználhatja a képtartalom ismétlődéseit, és veszteséges formátumnál a megőrzött részletek mennyisége is beállítható. Két azonos pixelméretű kép eltérő tartalommal eltérő méretű fájlt adhat. A PNG például veszteségmentes tömörítést használ; ez nem garantál minden képre azonos tömörítési arányt.
A képfájlméret-becslő egy kézzel megadott aránnyal is számol. Ha szemléltetésként 10:1 nyers/tömörített arányt feltételezünk, akkor 36 MB / 10 = 3,6 MB becsült adatméret. Ez a feltevés eredménye. A tényleges exportot mentsd el, és annak méretét mérd meg.
Memóriakerethez az egyidejű példányokat számold
Ha egy feldolgozás során az eredeti és a módosított 48 MB-os RGBA kép egyszerre van jelen, csak ez a két pixelpuffer 96 MB-ot igényel. Az előzménylépések, bélyegképek és munkaterületek további adatot tárolhatnak. A képletből ezért egy szükséges részösszeget kapsz.
Nulla vagy negatív képméret érvénytelen bemenet. Rendkívül nagy képnél már a szélesség és magasság szorzata is jelentős lehet. Mielőtt sok fájlt egyszerre dolgozol fel, egy reprezentatív képen mérd meg a folyamatot, majd a párhuzamosan megnyitott képek számához igazítsd a keretet.