Soubor bude mít koncovku .lay jako layers (vrstvy). Komentáře v souboru se budou dělat pomocí
# Komentář... Na každý řádek uvedete jednu vrstvu nebo jednu akci.
Budou zde dva nové termíny: paměť a pointer (ukazatel na
paměť). První co do souboru napíšeme je počet pointerů se kterými chceme
pracovat (počet vrstev, počet pamětí, které budeme chtít přidělit).
Význam zavináče @
Pamatujte: zavináč je prvním znakem v celém souboru, píše se na první řádek a slouží pro optimalizaci rychlosti načítání souboru s vrstvami. Je povinný.
Zavináč předchází číslo, které slouží k několika účelům. Mělo by orientačně označovat maximální počet vrstev, mělo by být větší než počet skupin a v případě, že soubor obsahuje hodně příkazů pro práci s vrstvami je lepší toto číslo zvětšit, takže může být klidně větší než počet vrstev. Toto číslo má vliv na dynamické přiřazování paměti během procesu parsování souboru vrstev. Čím větší číslo uvedete, tím větší bude blok přidělené paměti (je zbytečně zvětšovat číslo k dosažené enormní velikosti paměti, kterou byste nevyužili). Jako příklad uvedu @4 . Tímto se každý 4 příkaz znovu alokuje paměť. Pokud příkazů v souboru je 100, můžeme toto číslo klidně zvětšit třeba na 25, 35,50 apod. Pokud máme příkazů 20, postačí nám 5 nebo 6 případně rovnou 20. Během parsování souboru totiž program předen nevím kolik příkazů tam je, to víte jen vy. A aby bylo dosaženo co největší efektivity a rychlosti při parsování souboru, nastavujete si toto číslo sami.
@5 #vytvoří paměť pro 5 vrstev a program bude každých 5 příkazů zvětšovat znovu přidělovat paměť..
Výstupní vrstva $
Výstupní vrstva následuje za znakem dolaru a nachází se na stejném řádku jako @. Za dolarem uvedete číslo vrstvy, kterou chcete použít jako celkový výstup. Výstupem myslím výsledek všech operací, které se provedou na základě instrukcí v souboru s vrstvami. Ačkoliv cílovou vrstvu program použije až jako úplně poslední akci, je dobré to napsat hned na začátku pro vlastní přehlednost. Proto dolar musí být na stejném řádku jako zavináč.
Vytváření vrstev *
*2:RGB # Hvězdička označuje vrstvu, kterou chceme založit a
přidělit ji paměť. Bez přidělené paměti nelze začít pracovat, program
by vypsal chybu. Za hvězdičkou uvedeme číslo vrstvy. Nemusí být
automaticky 2. Uvědomte si, že program, bude pracovat z příkazového
řádku. Napíšete nějaký příkaz ve kterém bude argument např. -lay
reduce_shadows.lay , tím pádem se k příkazům z příkazového řádku přidají
příkazy z toho souboru který "zrovna teď" píšu. Je logické, že při
práci z vrstvama chceme také zdrojový soubor označit jako vrstvu.
Například *1 -source:rgb file.jpg -rgb2hsv by mohlo otevřít
soubor file.jpg v režimu RGB a následně ho převést na režim hsv, ale
předtím jsem dal příkaz na vytvoření paměti pro danou vrstvu, správněji
řečeno příkaz na vytvoření pointeru, který po otevření souboru ukazuje
na ten soubor načtený v paměti. Takže v souboru lay teď zakládám pointer
číslo 2 dvojtečkou mu přiděluji paměť o rozsahu tří kanálů. Pozn.
Jeden kanál zabírá jeden byte, tedy 8 bitů, takže se jedná o 32 bitový
soubor. Pokud by soubor obsahoval ještě alfa kanál (masku) tak by ho
nešlo načíst do paměti. V takovém případě byste museli napsat *2:RGBA
Poté co máte paměť přidělenou označíte s kterou vrstvou chcete pracovat.
*2:RGB 50% # číslo se znakem procenta označuje míru ne/průhlednosti vrstvy. Lze to použít pouze u "horní" vrstvy, která má být součástí efektu kde dochází ke slučování nebo míchání dvou vrstev. Známe to z Photoshopu: Když spodní vrstva má 100% neprůhlednost, ale vrstva nad ní má 50% tak výsledkem je, že se vrstva z 50 procent promítne do spodní vrstvy. Výsledná či-li cílová vrstva je ta ovlivněná vrstva která je dole. Je to jako svítit dvěma barevnými světly přes sebe, takže vytvoří odlišný odstín.
*2:RGB 100% &3 # Ampersand na konci řádku, který začíná hvězdičkou má odlišný význam než řádek, který začíná ampersandem. Význam je takový: Ampersandem odkazujeme na černobílou masku, kterou chceme připojit k této vrstvě. Říkáme tak, že se jedná o horní vrstvu, protože pixely se budou promítat do spodní vrstvy v závislosti na masce. Tam kde má maska černé pixely se nic nepromítne, tam kde má pixely bílé se nepromítne nic.
*3:BW ... # Vytvoření černobílé masky, místo teček bude třeba uvést zdroj, což bude záviset na situaci. U masky nemá smysl uvádět procenta průhlednosti protože jde o masku. U masky pravděpodobně nebudete chtít dělat žádné efekty, snad kromě efektu darken (ztmavení) nebo lighten (zesvětlení) v případě, že byste chtěli sečíst nebo odečíst bílé pixely s jinou maskou. Maska je určena hlavně k tomu, abyste na ní mohli odkázat pomocí ampersandu & v jiné vrstvě a dosáhnout tak připojení masky v vrstvě.
*3:BW 1 # Vytvoření jednobitové (černobílé masky). Maska se bude skládat pouze z bílé a černé barvy, žádné odstíny mezi tím. Taková maska umožňuje výrazně rychlejší porovnávání pixelů mezi cílovou vrstvou a maskou (mělo by jít zhruba o 128x rychlejší proces, ale závisí to na tom kolik černých pixelů obsahuje maska, čím více tím rychlejší). Uložení masky v tomto tvaru přímo do souboru by mělo v budoucnu poskytnout výhodu: do jednoho alpha kanálu se vám vleze více masek (snad až 128). Pro tento případ by musel existovat soubor masek popisující pořadí masek a co která maska obsahuje.
*3:BW 8 # Standardní osmibitová maska neboli osmibitový (černobílý) kanál obsahuje 256 barev - odstínů bílé, černé a šedé. Porovnávání pixelů mezi maskou a vrstvou bude probíhat standardní rychlostí.
Příkazy pro vrstvy &
&2:RGB # RGB označuje kanály, které chcete ovlivnit příkazem.V tomto případě všechny kanály.
&2:H # H označuje kanál, který chcete ovlivnit příkazem. V tomto případě pouze odstín..
&2:S # H označuje kanál, který chcete ovlivnit příkazem. V tomto případě pouze saturaci..
&2:V # V označuje kanál, který chcete ovlivnit příkazem. V tomto případě světlost barvy.
&2:RGB # a dále napíšete příkazy a argumenty. Ampersand &
zde říká že odkazuju na pointer vrstvy dva čili že tyto příkazy budou
platit pro vrstvu dva. Celý příkaz se musí vejít na jeden řádek.
Teď nebudu do detailu rozebírat strukturu argumentů, na to je ještě
hodně času. Při práci s vrstvama připravím nějaké ukázky jak to celé
funguje. Vše je zatím teprve ve fázi návrhu. Zápis instrukcí do souboru
mi přijde jako jediný způsob jak takové množství informací srozumitelně a
přehledně zapsat.
Odstranění vrstvy !
Důležité: je třeba pamatovat na to, že máme omezené množství paměti a
proto pokud některou vrstvu či masku už nebudeme potřebovat tak ji
odstraníme z paměti příkazem release ... !2:release ...případně můžeme použít slovo free. Důležité: vykřičník je prvním znakem na řádku, za ním následuje číslo vrstvy, která má být odstraněna. free má tentýž význam jako release.
Cílová vrstva
Taktéž
důležité je vědět, že po na konci instrukcí musí zůstat přidělená jedna
vrstva (jeden pointer) a to vrstva výstupní jinak by nebyl vrácen řádný
výsledek. Zřejmě na toto bude na začátku další značka na označení
výstupního pointeru (výstupní vrstvy). Možná vykřičník by mohl splňovat
takovou roli. Po zpracování všech instrukcí bude hotový obraz obrazně
řečeno předán do příkazového řádku, kde budeme pokračovat ve zpracování.
Byla by možná vyjímka pro to, kdy by výstupem souboru .lay nebyl žádný
obraz předávaný dál programu a to v případě, že se prostě rozhodneme
obraz rovnou uložit něco jako: &2:save myfile.jpg
Argumenty
&2: # a dále napíšete příkazy a argumenty. Ampersand &
zde říká že odkazuju na pointer vrstvy dva
Syntaxe příkazů vrstvy:
-a:action_name (arg1;arg2) -e:effect_name(arg1;arg2)
-a: označuje akci. aktuální akce jsou: threshold, levels, copy, resize
-f: označuje efekty typu filtr: blur, sharpen, noise, embos, aj.
-e označuje blending efekt. aktuální efekty jsou: disolve, darken, lighten, multiply, color_burn, linear_burn, linear_light, screen, color_dodge, linear_dodge, overlay, soft_light, hard_light, vivid_light, pin_light, hard_mix, hue, color, saturation, luminosity
názvy odpovídají názvům blending efektů Photoshopu.
Argumenty se píšou do kulatých závorek a oddělují středníkem.
Později upřesním přesný seznam názvů akcí a efektů.
Příklad:
&2:H -f:blur (5,4)
Měl by provést rozmazání odstínů
&2:HV -f:blur (5,4)
Měl by provést rozmazání odstínů a světlosti
Pozn: zmíněné efekty ještě nejsou funkční
Důležité: Pečlivě si prohlédněte povinné mezery mezi slovy. Tyto mezery programu umožňují snadnější rozparsování argumentů řádku. Pokud vynecháte např. mezeru mezi názvem akce (blur) a argumenty (5,4) tak program nebude moci najít akci s názvem "blur(5,4)". Místo mezery můžete použít taky tabulátor.
Novinka 1 - zásobníky:
Zatímco se mi zdá, že @ na začátku souboru, který označuje počet souborů, nebude třeba, vymyslel jsem novinku. Zapomněl jsem totiž zmínit, že na provedení "křivek" (korelace barev v režimu CMYK pomocí křivky, tzv. "Cubic Splines" ) bude třeba tzv. CMYK buffer (CMYK zásobník). CMYK zásobník je prostor v paměti vyhrazený obrazu v režimu CMYK. Není to to samé jako vrstva či obraz v režimu CMYK, protože můžete mít vrstvu v režimu RGB nebo HSV, ale CMYK zásobník může být zapnutý. Je to kopie obrazu, převedená do frmátu CMYK. Tuto kopii někdy potřebuji k provedení křivek. Samozřejmě by šli provádět i na vrstvě v jiném režimu, ale CMYK se mi zdá jako nejvhodnější kanál pro korelaci barev. Abyste nemuseli pokaždé obraz převádět do nové vrstvy, mohu vytvořit CMYK buffer automaticky při vytvoření každé vrstvy anebo na požadavek.
Moje aktuální představa tedy je, že na prvním řádku si řeknete jestli chcete mít CMYK zásobník zapnutý:
@100 +CMYK # Automaticky vytvoří CMYK zásobník pro každou vrstvu (vrstvy budou zabírat více paměti)
nebo
@100 -CMYK # Zásobníky se nebudou automaticky vytvářet a tím ušetříte paměť
Standardně by byl CMYK zásobník vypnutý
Další možnost jak aktivovat CMYK zásobník pro konkrétní vrstvu:
*2:RGB 100% &3 +CMYK # Vytvořit neprůhlednou vrstvu RGB se zásobníkem CMYK a připojí masku číslo 3 ... pořadí argumentů: není úplně jasné jestli bude poslední CMYK nebo &3
Pravděpodobná možnost odstranění zásobníku CMYK:
&2:RGB -CMYK # RGB by nemělo být povinné
Další možnost jak přepnout standardní chování mezi vrstvama:
-CMYK
nebo
+CMYK
Jakožto samostatný příkaz na novém řádku.
V těchto dnech dodělávám parsování souboru s vrstvami, takže se to brzo ujasní.
Pozn. nově podporuji i buffer HSV, takže to co jsem psal výše platí stejně i o HSV. Můžete mít obraz v RGB nebo CMYK a vytvořit si k němu zásobník HSV pokud chcete korigovat křivky odstínu, saturace nebo světla na fotografiích.
Novinka 2 - skupiny:
[1] # Označení skupiny vrstev
[2] # Označení skupiny vrstev
Photoshop umožňuje třídit vrstevy do skupin, které pak můžete např. přesouvat, vypnout nebo změnit jejich viditelnost. Jelikož můj program funguje trochu jinak a jednodušeni, vrstvy není možné přesouvat nebo vypínat jejich viditelnost. K čemu se ale dají vrstvy využít je že s nimi provedete hromadně nějakou akci, zvlášť a dodatečně. Tuto možnost chci nechat otevřenou, takže zabuduju možnost vytvořit skupinu tak, když na nový řádek do hranatých závorek napíšete číslo skupiny. Je zde ponechána možnost, že byste celou skupinu vrstev mohli na chvíli vypnout a pak ji zase zapnout, podobně jako ve Photoshopu.
1) @100 # Počet skupin nemůže být vyšší než počet vrstev.
2) Chcete-li deaktivovat (ignorovat) ty vrstvy, které jsou pod danou skupinou, pak stačí napsat:
[!3] Skupina vrstev ve skupině s číslem 3 bude deaktivována (počínaje tímto řádkem, až do další skupiny
3) Stačí napsat jeden vykřičník. Celková délka čísla skupiny uvnitř závorky nesmí být delší než 3 číslice, ale maximálně 2 číslice pokud použijete vykřičník.
4) číslo které napíšete do hranatých závorek se převádí na typ integer takže 001, 01 a 1 jsou jedno a totéž.
Novinka 3 - @:
Význam @ na prvním řádku souboru se změnil. Zavináč bude označovat nejen maximální počet vrstev - maximální číslo vrstvy (to ani tak nehraje roli, protože vrstvy počítám dynamicky), ale maximální počet skupin (maximální číslo!). Počet skupin nemůže být vyšší než počet vrstev (logické).
Žádné komentáře:
Okomentovat