Grayscale PNG digiKam-mal és ImageMagick-kel

Blog

TIFF fájlokkal dolgozni jó. Gyorsan írható/olvasható formátum (ha nincs tömörítve!), cserébe pazarlóan bánik a tárhellyel. Viszont ebben archiválni butaság, a szintén veszteségmentes PNG sokkal tömörebb. Még tömörebb, ha a monochrome képeket RGB helyett szürkeárnyalatosként mentjük el. Ez egy-egy képnél nem nagy gond, de ha sok TIFF-ről van szó már érdemes elgondolkodni egy kötegelt megoldásról. Jelen posztban TIFF képek grayscale PNG-be, valamint RGB PNG-k grayscale PNG-be történő tömeges konvertálásról lesz szó nyílt forráskódú programokkal  – nem csak linuxereknek és nem csak analógosoknak.

Szükség lesz a digiKam képkatalogizálóra és az ImageMagick programcsomagra.

Méret a lényeg

Aki nagy felbontású kamerával fotóz az óhatatlanul szembesül tárhely problémával. Mármint hogy gyorsan fogy. A Nikon D800 egy legjobb minőséget adó 14bites veszteségmentesen tömörített RAW fájlja 38-45 MB körül van. Középformátumú filmmel még durvább a helyzet. Csak úgy röpködnek a 100 megabájtok. Egy nem is olyan nagy felbontású 2400dpi-s monochrome 6×6-os simán felette van – TIFF-ben. PNG-ben viszont bőven lemehetünk 100 alá, 15-30% tárhelyet spórolhatunk. Példaként lássuk az alábbi felvételt:

Monte Gusela a Giau hágóról – Ilford FP4+ film (Dolomitok, Olaszország 2018.)

A fenti kép 16 bites 2400 dpi, 7070×7136 pixel azaz 50,5 megapixel – egy tipikus 6×6-os negatívról szkennelt képkocka. (Szegélyeket rajta szoktam hagyni, hogy több terem legyen estleges forgatáskor.) A kép jelentős részét unalmas égbolt uralja, ezért még a TIFF is viszonylag hatékonyan tudja tárolni. GIMP-ben megnyitva 470MB RAM kell neki.  Lássuk a fájlméreteket:

FormátumFájlméretVeszteség
TIFF, tömörítetlen 16bit grayscale101,3 MB28,17%
TIFF, deflate 16bit grayscale92,6 MB17,551%
PNG, 16bit grayscale 9-es tömörítés78,8 MB

Egy roll-on 12 felvétel fér el, ha ügyes vagyok 13. Már egy 100 tekercsből álló archívumnál is súlyos gigabájtokról van szó!

Persze mondhatod, hogy a 8 bites JPEG sokkal tömörebb. Igen, de a szürkének csak 256 árnyalatát írja le a 16 bit 65536-val szemben, ráadásul veszteséges tömörítéssel. Nem azért fotózok rollfilmre, hogy veszítsek a tonalitásból vagy butítsam képeim minőségét a DSLR szintje alá. 😉

A probléma

Jó, akkor mentsünk grayscale PNG-be. GIMP-ben ez nem gond, grayscale-re állítjuk és export PNG. Viszont a legtöbb tömeges feldolgozásra képes szerkesztő program, pl. a darktable, RawTherapee (de emlékeim szerint a Lightroom is) vagy akár a digiKam beépített szerkesztője csak is kizárólag RGB (azaz színes) PNG-t képes exportálni. A példaként felhozott felvétel viszont RGB módban 149,6MB lenne. Igen, közel duplája a szürkeárnyalatosnak!

Egy szkennelt monochrome rollfilm képkockái darktable-ben

RGB módban vörös (Red), zöld (Green), kék (Blue) csatornákra bontva kerül tárolása a kép, holott egy szürkeárnyalatos felvételen semmi szükség színeket leíró információkra. Kizárólag  egy dolog a fontos: adott képpont mennyire világos – ezt pedig elég egyetlen egy csatornán eltárolni. Ez lenne a grayscale, azaz a szürkeárnyalatos “színmód” lényege.

Kicsit szakadjunk el a filmtől és nézzünk egy digitális forrású példát is, mert azért abból is lehet izgalmas monochrome képeket készíteni. Nikon D800 vágatlan teljes kockája, darktable-ben kidolgozva:

A felújított kilátó előtere (Csónakázó tó, Nagykanizsa 2018.)

Sok finom részletet tartalmaz, ISO400-as zajcsillapítás nélkül, kevés a homogén felület – ezért nehezebben tömöríthető. 7378×4924 pixel, azaz 36,33 megapixel. Lássuk 8 illetve 16 biten mekkorát bukunk RGB módban:

FormátumFájlméretVeszteség
PNG, 8 bit RGB 9-es tömörítés36,7 MB56,84%
PNG, 8 bit grayscale 9-es tömörítés23,4 MB
PNG, 16 bit RGB 9-es tömörítés84,4 MB30,65%
PNG, 16 bit grayscale 9-es tömörítés62,6 MB

Az eredeti RAW fájl 44,1 MB – de ne felejtsük el, hogy az “csak” 14 bites.

Apró megjegyzés a 8 bit JPEG vs. 16 bit PNG-hez: a böngészőben látható 8 bites JPEG sem részleteiben, sem tonalitásában messze nem  adja vissza azt amit az AdobeRGB színterű 16 bites monitoromon látok a szintén 16 bites PNG- megnyitva.!

Egy egyszerű parancssori megoldás

A legtriviálisabb “favágó” módszer a képek GIMP-ben egyesével történő megnyitása/konvertálása/exportálása lenne. Azért ez elég macera.

Az ImageMagick csomag viszont tartalmaz egy ügyes kis programot, a convert-et. Grafikus felülete nincs, parancssorból indítható és paraméterezhető. Az ImageMagick-et ha nem is ismered, tudtodon kívül bizonyára már találkoztál vele: nagyon sok webszerver a háttérben ezt használja képek átalakítására.

Így néz ki a convert-tel egy RGB kép szürkeárnyalatosra konvertálása, azaz hogy csináljunk 3 színcsatornából egyet:

convert -colorspace GRAY rgb_peldakep.png gray_peldakep.png

Tehát egy RGB állományból kreáltunk egy másik grayscale képet.  Mi van, ha egy könyvtár összes képét akarjuk átkonvertálni? Egy egyszerű for ciklus* segít a bajon, akár így ahogy van futtathatjuk is bash terminálban:

for img in $(find . -iname '*.png'); do echo -n "Converting $img"; convert -colorspace GRAY $img $img && echo ' [Done]'; done

*forrás: askubuntu.com fórum

Tömeges grayscale konvertálás grafikus felületen digiKam-mel

A fenti módszer szép és jó, de ha használunk egy olyan minden igényt kielégítő képkatalogizáló szoftvert, mint a digiKam, akkor annak a felületét dőreség elhagyni. A digiKam egy rendkívül robusztus rendszer, mindenkinek csak ajánlani tudom – félelmetes mi mindenre képes. Appimage-ként is letölthető, futtatható GNU/Linux-on, Mac-en de még Windowson is. Nyílt forráskódú, tehát ingyenes. Magyarul tud. Itt szerezheted be: digikam.org

Rengeteg szolgáltatása közül az egyik leghasznosabb a kötegelt parancssor kezelés, amivel több könyvtár tartalmán is végigszaladhatunk – vagy akár a teljes gyűjteményen. A gond, hogy önmagában ő is csak RGB kimenetet tud. De! Képes felhasználói szkripteket futtatni és külső programokat meghívni. Ezt most ki is használjuk: bedrótozzuk az ImageMagick-ból a convert-et. Kezdjük!

Jelöljük ki a konvertálni kívánt fájlokat és az “Eszközök” menüben a “Kötegelt sorkezelő” pontot kiválasztva, vagy csak szimplán a billentyűzet “B” gombját megnyomva már is létrehoztunk a kijelölésből egy listát, ami már csak is a mi parancsainkat várja. Ha más mappákból is szeretnénk hozzáadni képeket, akkor bátran zárjuk be – a lista megmarad – és válaszunk ki még képeket, azután nyomjuk meg a “CTRL+B”-t. Megint előjön a sorkezelő, az újonnan kiválasztott képekkel bővülve.

Az sorkezelő alap eszközeiből egyetlen parancsra lesz szükségünk, a legutolsóra: “User shell script” – lásd a képernyőkép alján (1a).  Bökjünk rá kétszer, erre felveszi a hozzáadott eszközök listára (1b). Itt is kattintsunk rá és a jobb oldali bárbeszéd panelen (2) pötyögjük be szépen:

convert -colorspace GRAY $INPUT $OUTPUT

Lusták természetesen innen is felvehetik vágólapra. Mint látható, nem kell megadni fájlneveket ezt majd a sorkezelő megteszi helyettünk ahogy halad végig a képeken. Fontos, hogy “Output file type” az “Same as input” legyen, amint a képernyőmentésen is látható. A bal alsó panelen a “Viselkedés” fül alatt mindenképpen válaszuk ki az “Automatikus felülírás” opciót (3), így nem maradnak meg az eredeti helypazarló RGB fájljaink. Ha nagyon sok képet konvertálunk bekapcsolhatjuk a “Munka minden processzor magon”-t és mehetünk ellőni még egy teki filmet.

Már csak egy dolgunk van: kattintsunk bal fent a “Futtatás” gombra (4) és mondjunk végső búcsút az RGB képeinknek.

A sorkezelő legelső “Sorok” menüpontjában a felépített munkafolyamatot (ami ugye jelen esetben csak egyetlen parancs) elmenthetjük, a későbbiekben jobb lent a Munkafolyamat fülön bármikor újra előhívhatjuk.

Legközelebb már csak annyi lesz a dolgunk, hogy listára vesszük a képeket, kiválasztjuk az elmentett munkafolyamatot és bökünk a futtatás gombra. Bonyolultsága a ceruzahegyezéssel vetekszik.

Természetesen több utasítást és végigpörgethetünk – azért sorkezelő 😉 lásd TIFF-ből grayscale PNG:

A fenti képernyőmentésen például a szkennelt nyers RAW TIFF-ek szürkeárnyalatos PNG-be történő konvertálását szemlélteti. Invertálja a negatív képet, elforgatja 180°-kal, ír belőle egy PNG-t amit átkonvertál grayscal-re. Rengeteg időt spórolok vele, most hazaérve a Dolomitokból 4 teki előhívása / szkennelése után különösen hasznosnak bizonyult.

Sok másra is használható még a sorkezelő, pl. átméretezésre, JPEG konvertálásra, vízjelezésre, credit note rögzítésére, optimalizálásra, élesítésre és még hosszan sorolhatnám. Ha nem ismered a digiKam-et tegyél vele egy próbát, ez csak egy volt a rengeteg hasznos funkciója közül!

Jó éjt és felszabadult tárhelyet kívánok! 🙂


Up:

A darktable PNG exportja szerintem egy LUA szkripttel meghekkelhető, amivel kapásból grayscale lenne a kimenet. Ezen még dolgozom. 

Hozzászólás