2016-07-23 11 views
0

Sie können JavaScripts (Extended Script) aus Photoshop verwenden, um einige Prozesse zu automatisieren.Photoshop Automatisierung: DoJavaScriptFile von Delphi?

Es gibt einen Weg JavaScripts für Photoshop mit C# nennen mit einer DoJavaScriptFile() Funktion:

//See the Adobe Photoshop Object Library on the COM 
using Photoshop; 

static void Main (args string[]) 
{  
//Sample jsx path 
var jsxPath = @ "C:\\sample.jsx"; 

//Defines the object type List 
var jsxArgs = new List <Object>(); 
for (int i = 0; i < args. Length; + + i) 
{ 
    jsxArgs.Add(args [i]); 
} 

//List containing the arguments to(jsxArgs) a c# ToArray() to convert from //the List into an array.  
app.DoJavaScriptFile(jsxPath, jsxArgs.ToArray(), Photoshop.PsJavaScriptExecutionMode.psNeverShowDebugger); 

} 

Wie kann ich DoJavaScriptFile() Delphi Code?

Der einzige Weg, ich Photoshop mit meiner Delphi-Anwendung bearbeiten kann verwendet den RunAction() Befehl (die für meine Bedürfnisse nicht stark genug ist!):

uses ... PhotoShopTypeLibrary_TLB; 
var 
    Form1: TForm1; 
    PS: IPhotoShopApplication; 
    DESC: IActionDescriptor; 
    Pic: IAutoPSDoc; 
    AC: IActionControl; 
    xi: Integer; 

implementation 

{$R *.dfm} 

procedure TForm1.Button1Click(Sender: TObject); 
begin 
    PS.PlayAction('Name of Photoshop-Action'); 
end; 

All jemand Ideen?

+0

nie versucht, es , und ich habe kein Photoshop, aber ISTM, dass Sie zuerst eine gültige IPhotoshopApplication erhalten sollten. Hast du? –

+0

In C# schrieb ich: ps.Application app = neue ps.Application(); Ich kann dann PlayActions und JavaScripts über PS.doAction ('Name von Photoshop-Action'); oder PS.doJavaScript ... Aber ich kann .doJavaScript nicht mit Delphi-Code zugreifen. –

Antwort

1

Versuchte mit Delphi XE und Photoshop-CC, wenn u seine TLB importieren
enter image description here

es viele Schnittstellen sein:

_Application = dispinterface 
    ['{5DE90358-4D0B-4FA1-BA3E-C91BBA863F32}'] 
function DoJavaScript(const JavaScriptCode: WideString; Arguments: OleVariant; 
        ExecutionMode: OleVariant): WideString; dispid 1147828311; 
function DoJavaScriptFile(const JavaScriptFile: WideString; Arguments: OleVariant; 
         ExecutionMode: OleVariant): WideString; dispid 1147823703; 
+0

Ja, es gefunden! Wie löst man diese Funktion korrekt aus Unit1 aus? Ich habe auch die TypeLibrary hinzugefügt - endlich! Tlibimp.exe kann keine Leerzeichen in angegebenen Pfaden verarbeiten. Es schlägt mit "... \ Adobe Photoshop \ typelibrary.tlb" fehl. Musste die Datei auf C: \ –

+0

setzen. Habe es gerade: var app: _Application; app.DoJavaScriptFile(); Oh das ist großartig! Vielen Dank! –

1

Problem gelöst:

procedure TForm1.Testprocedure1Click(Sender: TObject); 
var 
    app: OleVariant; 
    jsxArgs: Variant; 
begin 
    app := CreateOLEObject('Photoshop.Application'); //starts PS 
    app.Load(FileListBox1.FileName); //loads a Picture... 

    jsxArgs := VarArrayCreate([0,1], varVariant); 
    jsxArgs[0] := 3; 
    // jsxArgs[1] := ' '; more Arguments if needed 
    app.DoJavaScriptFile(EXEPath + 'jsx\flattenLayersOfMe.jsx', jsxArgs, 1); //runs a JavaScript 
end;