Boostskripte

Boostskripte dienen dazu, die Stapelverarbeitung um eigene Funktionen zu erweitern.

1. Allgemeines

  • Boostskripte müssen in JScript geschrieben sein und liegen im Pfad "<Datenpfad>\Batchscript\Boost".
  • Die letzte Zeile eines Boost-Skripts muss unbedingt eine Leerzeile sein, anderenfalls tritt ein Fehler auf.
  • Boostscripte sind ja keine "vollwertigen" Scripte. Sie enthalten regelmäßig nur wenige Zeilen die in das von FF erzeugt Stapel-Script eingebunden werden. Das hat u. A. zur Folge, dass Boostskripte keine Funktionen enthalten können, da sie selbst nur Bestandteile der Funkion "main()" im Stapelskript werden.

2. Variablen

Es gibt einige Variablen, u.a. damit die Stapelverarbeitung erkennt, ob das Bild verlustfrei oder verlustbehaftet verarbeitet werden kann.
Wann immer das Bild geändert wurde, muss die entsprechende Variable gesetzt werden, sonst erfolgt keine Übernahme.
Variable
Erläuterung
Verlustfreie Bearbeitung?
srcname
Der originale Name des Bildes (darf nicht verändert werden)

tmpname
Der temporäre Name des Bildes (darf verändert werden)

image_modified = 1;
Das Bild im Speicher ist verändert
nein
file_modified = 1;
Die Bilddatei ist verändert
nein
exif_modified = 1;
Die Exif-Daten sind verändert
ja
iptc_modified = 1;
Die IPTC-Daten sind verändert
ja
geo_modified = 1;
Das Bild ist in seiner Geometrie verändert
nein
file_overwrite = 0
Wenn gleichnamiges Bild schon existiert
0 = vor Überschreiben nachfragen (Standard)
1 = nicht nachfragen

dstname
Pfad und Dateiname, unter dem das bearbeitet Bild gespeichert wird

Weitere Variablen können ggf. nach der Analyse der Dateien Header.js und Footer.js im Ordner BatchScript\ ermittelt werden.

Die temporäre Kopie des Bildes (Variable tmpname) wird im allgemeinen TEMP-Verzeichnis abgelegt, das mit dem File Script Objekt ermittelt werden kann:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject")
sTempPath = fso.GetSpecialFolder(2)

Die Variable scriptmode informiert über den Zustand, in dem die Stapelverarbeitung sich beim Aufruf des Boostskriptes befindet.
0 = Erzeugung der kleinen Vorschau
1 = Erzeugung der großen Vorschau (In diesem Zustand können z. B. Voreinstellungen vorgenommen werden.)
2 = Stapelverarbeitung läuft (Dieser Zustand wird auch durch running = true repräsentiert)

3. indirekter Scriptaufruf

Aus einem Boostscript heraus können mittels FF_CallScript weitere Scripte aufgerufen werden, die dann auch in VBScript erstellt sein können. Mit FF_SetParam bzw. FF_GetParam ist dabei eine Parameterübergabe zwischen Boostscript und dem externen Script möglich.
if(running)                                        // Stapelverarbeitung läuft gerade ab
{
  var sp=FF_getParam();
  var pa=FF_GetFFPathEx(5) + "\\exifschrift.vbs";  // externes Script wird festgelegt
  FF_SetParam("");
  FF_CallScript(pa);                               // externes Script wird aufgerufen
  FF_SetParam(sp);
  image_modified = true;                           // Meldung an die Stapelverarbeitung, dass Bild verändert wurde
}
Beispiel 1
Stellt den Benutzerdialog zur Verfügung
//FFName=Benutzerdialog
 
FF_UserDialog("",0)
image_modified = 1;
geo_modified = 1;
Beispiel 2
Lädt die Bilder auf den Webspace, der in den Optionen des Speichern-unter-Dialogs eingestellt ist. Ein Ordner auf der Festplatte muss aber trotzdem angegeben werden. In dieses Verzeichnis wird außerdem eine Textdatei abgelegt, die sämtliche Pfade der hochgeladenen Dateien enthält.
//FFName=FTP-Upload
 
if(scriptmode != 2)
    {
    FF_WriteProfile("Upload", "Existfile", "1");
    }
 
if(running)
    {
    if(FF_SaveImage(dstname,jpeg_qual))
        {
 
        var textpath = fso.GetParentFolderName(dstname) + "\\UploadedFiles.txt";
        var kenner = FF_GetProfile("Upload","Existfile");
        if (kenner == 1)
            {
            if (fso.FileExists(textpath))
                {
                fso.DeleteFile(textpath);
                }
            FF_WriteProfile("Upload", "Existfile", "0")
            }
 
        var oShell = new ActiveXObject("WScript.Shell");
        // Lies mal die FTP-Einstellungen aus der Registry aus
        var ftpserver = oShell.RegRead("HKCU\\SOFTWARE\\Joachim Koopmann Software\\FixFoto\\Options\\FTPServer");
        var ftppath = oShell.RegRead("HKCU\\SOFTWARE\\Joachim Koopmann Software\\FixFoto\\Options\\FTPPath");
        var dlpath = oShell.RegRead("HKCU\\SOFTWARE\\Joachim Koopmann Software\\FixFoto\\Options\\FTPDPath");
        var ftpuser = oShell.RegRead("HKCU\\SOFTWARE\\Joachim Koopmann Software\\FixFoto\\Options\\FTPUser");
        var ftppass = oShell.RegRead("HKCU\\SOFTWARE\\Joachim Koopmann Software\\FixFoto\\Options\\FTPPwd");
        var ftppassive = oShell.RegRead("HKCU\\SOFTWARE\\Joachim Koopmann Software\\FixFoto\\Options\\PassiveFTP");
        //Uploadpfad der Bilder
        var dpath = SplitPath(dstname);
        dpath = dlpath  + "/" + dpath.file + dpath.ext;
        //Bild speichern und hochladen
        if(!FF_SaveFTP(dstname, ftpserver, ftppath, ftpuser, ftppass, 1))
            FF_MessageBox("Fehler beim FTP-Upload",0);
        //Text-Datei schreiben (Zeile anhängen)
        if(!fso.FileExists(textpath)) fso.CreateTextFile(textpath, true);
        var f = fso.GetFile(textpath);
        var ts = f.OpenAsTextStream(8);
        ts.WriteLine(dpath);
        ts.Close();
        fso.DeleteFile(dstname);
        }
        //
 
    }

4. Bildvarianten im Stapel erzeugen

Normalerweise wird eine Stapelverarbeitung auf jedes der ausgewählten Bilder genau einmal angewandt, das Ergebnis wird gespeichert. D. h. es gibt für jedes Bild genau ein Resultat. Mithilfe einiger Booststripte könne jedoch in einem Rutsch mehrerer Varianten von ein und demselben Bild erzeugt werden. In einem zweiten Arbeitsschritt können die erstellten Varianten dann z.B. verglichen und das jeweils bessere Bild kann ausgewählt werden.

Allgemein hat eine solche Stapelverarbeitung folgende Struktur:
stapelvarianten.png
push.js
// FFSubmenu=Boostscripts
// FFName=push
 
if(running)
{
FF_PushImage();
}
//Module push.js ende
zwischenspeichern.js
// FFSubmenu=Boostscripts
// FFName=Zwischenspeichern
 
if(running)
{
if(0 != file_size) jpeg_qual = FF_GetJPGCompression(file_size);
FF_SaveImage(dstname,jpeg_qual);
}
//Module Zwischenspeichern.js ende
pop.js
// FFSubmenu=Boostscripts
// FFName=pop
 
if(running)
{
FF_PopImage();
}
//Module pop.js ende
Die 3 Skripte: