Hromadné zavření všech otevřených souborů s uložením změn

lekce 4.

Automatizování úloh v Adobe Photoshop

Pomocí skriptovacího jazyka JavaScript

Cíl lekce

V této lekci rozšířím přechozí skript a to o zavření všech souborů a uložení změn v těchto soubrech. Převezmu tedy většinu zdrojového kódu z předchozí lekce a jen přidám jednu funkci pro uložení souboru a upravím tělo skriptu.


Využité třídy v této lekci

  • Application: kořenová třída, která obsahující třídy File a Folder.

Vytvoření funkce pro uložení obrázku

Vytvoření funkce, která bere parametr nameOfImage. Vložení cesty k souboru a názvu souboru do objektu File. Vytvoření proměnné opts a nastavením atributů uložení na formát JPEG a zadáním kvality obrazu. Zavolání metody saveAs(), která bere parametry - soubor, atributy uložení, hodnotu zda vytvořit kopii (true) nebo přeuložit soubor (false). Po uložení je ještě třeba aktuální soubor zavřít, abych se posunul k dalšímu souboru. Jako udávání cest, bych nedoporučil dávat relativní cestu. Z toho důvodu, že Adobe Photoshop bere v potaz jako výchozí adresář, adresář scripts, který se nachází v cestě uložení programu. Toto by v případě různých nastaveních práv na systému, či využívání několika uživatelů v systému mohlo vést k potížím z důvodu práv zápisu do tohoto adresáře. Nicméně tato situace může nastat i u cesty absolutní, ale je již méně pravděpodobná, jelikož uživatel v kládá cestu vědomně.

function saveJpeg(nameOfImage){
	//absolutní cesta k novému souboru, název souboru
    var file = new File('C:/Users/David/Downloads/test/' + nameOfImage + "_upraveny.jpg");
	//atributy nového souboru
    var opts = new JPEGSaveOptions();
    //kvalita formátu JPEG -> rozsah 0 - 10
    opts.quality = 5;
	//uložení souboru jako kopie
    app.activeDocument.saveAs(file, opts,true);
    //zavření aktuálního souboru
    activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}

Vložení funkce pro uložení do těla skriptu

Nyní stačí vytvořenou funkci vložit na patřičné místo do těla předešlého skriptu. A to do funkcí na zavření všech souborů, či na zavření všech soubroů kromě aktuálního.

//funkce na zavření všech souborů
function closeAllFiles(){
	//dokud je otevřený dokument, zavři
    while (documents.length > 0) {
        saveJpeg(app.activeDocument.name);
	}
}

//funkce na zavření všech souborů, kromě aktivního
function closeAllFilesExceptActiveOne(){
    var actDocument = app.activeDocument;
    while (documents.length > 1) {
		for (var i = 0; i < documents.length; i++) {
			//zavřít všechny, kromě aktivního
			if (actDocument != documents[i]) {
				saveJpeg(app.activeDocument.name);
			}
		}
	}
}

Výsledný zdrojový kód

if (documents.length) {

    //Použijte funkci, kterou potřebujete
    //Zavření všech dokumentů
    closeAllFiles()
    //Zavření všech dokumentů, kromě aktivního
    //closeAllFilesExceptActiveOne()
    
    //Nastavení id události pro zavření programu
    var idquit = charIDToTypeID( "quit" );
    //Zavření programu Adobe Photoshop po změnách
    executeAction( idquit, undefined, DialogModes.ALL );
} else {
    alert("Žádný dokument není otevřený.", "Varování");
}

//funkce na zavření všech souborů
function closeAllFiles() {
    //dokud je otevřený dokument, zavři
    while (documents.length > 0) {
        saveJpeg(app.activeDocument.name);
    }
}

//funkce na zavření všech souborů, kromě aktivního
function closeAllFilesExceptActiveOne() {
    var actDocument = app.activeDocument;
    while (documents.length > 1) {
        for (var i = 0; i < documents.length; i++) {
            //zavřít všechny, kromě aktivního
            if (actDocument != documents[i]) {
                saveJpeg(app.activeDocument.name);
            }
        }
    }
}

function saveJpeg(nameOfImage) {
    //absolutní cesta k novému souboru, název souboru
    var file = new File("C:/Users/dbala/Desktop/test/" + nameOfImage + "_upraveny.jpg");
    //atributy nového souboru
    var opts = new JPEGSaveOptions();
    //kvalita formátu JPEG -> rozsah 0 - 10
    opts.quality = 5;
    //uložení souboru jako kopie
    app.activeDocument.saveAs(file, opts, true);
    activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}