Digitális és informatikai

Kép nyers memóriaigénye: pixelszám, színcsatornák és tömörített fájl

Egy 12 megapixeles képen számoljuk ki az RGB, RGBA és 16 bites változat adatméretét. Megnézzük az átméretezés és egy feltételezett tömörítési arány hatását.

Dajka Gábor3 perc olvasás

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éppontadatBájt/pixelNyers méret
RGB, 8 bit/csatorna336 MB
RGBA, 8 bit/csatorna448 MB
RGB, 16 bit/csatorna672 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.

További cikkek

Kapcsolódó olvasnivalók

Gyorskereső

Kalkulátorok és útmutatók keresése

↑↓ választásEnter megnyitásEsc bezárás