Programujeme Photoshop – 4. Funkce a dialogy

Funkce s parametry. Zadávání proměnných pomocí dialogů.

Minule jsme si ukázali, jak zaznamenat činnosti ve Photoshopu do skriptu a jak skripty editovat a spouštět..

Místo vytváření nových skriptů pro různá nastavení, může být lepší, mít jeden skript, který spustí dialog, ve kterém zadáme konkrétní hodnoty, se kterými se skript provede. Jak na to, si ukážeme v následujícím textu.

Zůstaneme u našeho příkladu se zvýrazněním barev a pokusíme se ho upravit tak, abychom mohli pokaždé zvolit jinou míru zvýraznění.

Začneme tím, že si jednotlivé části skriptu z minulého dílu převedeme na funkce. Před každou sekci,  přidáme klíčové slovo function, za něj název funkce s kulatými závorkami a sekci uzavřeme do složených závorek. Funkce pro převod do Lab pak vypadá takto :

function PrevedDoLab() {
var idCnvM = charIDToTypeID( "CnvM" );
var desc14 = new ActionDescriptor();
var idT = charIDToTypeID( "T " );
var idLbCM = charIDToTypeID( "LbCM" );
desc14.putClass( idT, idLbCM );
var idMrge = charIDToTypeID( "Mrge" );
desc14.putBoolean( idMrge, false );
var idRstr = charIDToTypeID( "Rstr" );
desc14.putBoolean( idRstr, false );
executeAction( idCnvM, desc14, DialogModes.NO );
}

Takto upravíme všechny tři sekce. U sekce Křivek přidáme do hlavičky funkce proměnnou n.

function Krivky(n) {

Ta nám bude sloužit jako hodnota, kterou budeme řídit sílu zvýraznění barev. Na řádcích, kde se zadávají horizontální posuny křivek do proměnné idHrzn,  nahradíme konkrétní hodnoty 28.0 a 228.0 výrazy n a 256.0-n.  Řádky budou vypadat takto :

 desc19.putDouble( idHrzn, n);
 desc20.putDouble( idHrzn, 256.0-n );
 desc22.putDouble( idHrzn, n );
 desc23.putDouble( idHrzn, 256.0-n );

Na konec skriptu pak připíšeme řádky, které funkce spustí :

var n=28;
PrevedDoLab();
Krivky(n);
PrevedDoRgb();

Takto napsaný skript by nám spustil zvýraznění jen pro jednu hodnotu n=28. Jak ale udělat, že si ji budeme moci po spuštění skriptu zadat? Naprogramujeme si dialog, ve kterém hodnotu zadáme. Funkce dialogu vypadá takto :

function DialogN(n) {
var dlg = new Window('dialog', ' Zadání posunu křivky.', undefined, {closeButton: false}); // nema zaviraci tlacitko - muse se zmacknout bud OK nebo Cancel
dlg.n=n; // predej promennou dialogu
var radek = dlg.add('group'); // dialog ma jeden radek
radek.orientation = 'row';
radek.text = radek.add('statictext',[0,0,120,20]); // na zacatku je text
radek.text.text ='Posun křivky [1-127] :';
radek.edit = radek.add('edittext',[0,0,40,20]); // pak editacni box
radek.edit.text=dlg.n;
radek.edit.onChange = function() // co delat kdyz se zmeni hodnota v editacnim boxu
{ if ((radek.edit.text > 0) && (radek.edit.text < 128)) dlg.n=radek.edit.text; else radek.edit.text=dlg.n; // zkontroluj meze n
};
// na spodni radek pridej OK a Cancel
var buttons = dlg.add('group'); // buttons group
buttons.orientation = 'row';
buttons.alignChildren = 'fill';
buttons.alignment= 'center';
var btnOK = buttons.add('button'); // OK button
btnOK.text = 'OK';
dlg.defaultElement = btnOK;
var btnCancel = buttons.add('button'); // Cancel button
btnCancel.text = 'Cancel';
dlg.cancelElement = btnCancel;
return dlg; // vrat jak dialog dopadl
}

Ve skriptu ji použijeme následujícím způsobem :

// volani samotneho skriptu
var n=28;
// v dialogu zadej : n
var dialog = DialogN(n);
if (dialog.show() == 1)
{ n=dialog.n;
PrevedDoLab();
Krivky(n);
PrevedDoRgb();
}

Dialog zvýraznění barev.

V dialogu jsem hodnotu n omezil minimem 1 a maximem 127. V praxi mají smysl hodnoty mezi 10 a 50. To už si ale můžete vyzkoušet sami.

Teď už zbývá si skript nahrát do adresáře skriptů Photoshopu „C:Program FilesAdobeAdobe Photoshop CC 2015PresetsScripts“, případně si z něj vyrobit akci.  Skript i sadu s akcí si můžete stáhnout tady.

Tímto způsobem si můžete vytvářet libovolné skripty, které Vám usnadní práci s Photoshopem. Více o psaní dialogů se můžete dozvědět v příručce Petera Kahrela Beginning ScriptUI.

Příště si ukážeme jak vytvářet vlastní panely a v nich spouštět skripty.