Bitte beachten Sie, dass ich ein absoluter Anfänger bin und dies meine erste Codierungsfrage überhaupt ist. Wenn dies auf einer anderen Website angemessener ist, sagen Sie es mir.
Ich möchte einen Prozess automatisieren, bei dem das Programm eine Farbe auswählt und in eine andere ändert.
Dies ist der Code, den ich habe, dank des Skript-Listeners:
var id159 = charIDToTypeID( "ClrR" );
var desc34 = new ActionDescriptor();
var id160 = charIDToTypeID( "Fzns" );
desc34.putInteger( id160, 0 );
var id161 = charIDToTypeID( "Mnm " );
var desc35 = new ActionDescriptor();
var id162 = charIDToTypeID( "Rd " );
desc35.putDouble( id162, 0.000000 );
var id163 = charIDToTypeID( "Grn " );
desc35.putDouble( id163, 255.000000 );
var id164 = charIDToTypeID( "Bl " );
desc35.putDouble( id164, 0.000000 );
var id165 = charIDToTypeID( "RGBC" );
desc34.putObject( id161, id165, desc35 );
var id166 = charIDToTypeID( "Mxm " );
var desc36 = new ActionDescriptor();
var id167 = charIDToTypeID( "Rd " );
desc36.putDouble( id167, 0.000000 );
var id168 = charIDToTypeID( "Grn " );
desc36.putDouble( id168, 255.000000 );
var id169 = charIDToTypeID( "Bl " );
desc36.putDouble( id169, 0.000000 );
var id170 = charIDToTypeID( "RGBC" );
desc34.putObject( id166, id170, desc36 ); executeAction( id159, desc34, DialogModes.NO );
Wenn ich das in Photoshop ausführe, funktioniert es, aber da ich viele Farben auswählen muss, möchte ich es wissen
In diesem Beispiel wäre das Hex 00ff00
Dies ist eher ein langer Kommentar als eine Antwort. Ich bin mir nicht sicher, ob die Auswahl des Farbbereichs der beste Weg ist, um die Farbe zu ersetzen, aber ja, Sie könnten dies tun.
Zeilenanzahl macht Code nicht effizienter! Eine Codezeile kann durchaus weniger effizient sein als 100. Außerdem gibt es Code unter Code, also ist es nicht so, als würde Ihre Skriptsprache auf die Probe stellen. Auch die Skript-API ist von Natur aus ineffizient, wenn Sie Wert auf Geschwindigkeit legen, dann ist es an der Zeit, mit dem Schreiben von C++ zu beginnen und die Photoshop-Plugin-API zu verwenden.
Ich nehme jedoch an, dass Sie praktischer meinen. Ja, wir können einige Funktionen definieren, um es einfacher zu lesen und zu verwenden, aufzurufen und etwas zu komprimieren. Wenn Sie es praktischer machen, wird die Länge zwar etwas länger, aber das ist für Sie nicht sinnvoll. Lassen Sie uns also den Code umgestalten:
#target photoshop
selectColorRange(
RGBc(0.0, 255.0, 0.0),
RGBc(0.0, 255.0, 0.0)
);
/******* Support functions *******/
function cTID(s) { return app.charIDToTypeID(s); }
function sTID(s) { return app.stringIDToTypeID(s); }
function RGBc(r, g, b) {
var color = new ActionDescriptor();
color.putDouble( cTID("Rd "), r);
color.putDouble( cTID("Grn "), g);
color.putDouble( cTID("Bl "), b);
return color
}
function selectColorRange(color1, color2){
var desc = new ActionDescriptor();
desc.putInteger(cTID("Fzns"), 0 );
desc.putObject( cTID("Mnm "), cTID("RGBC"), color1 );
desc.putObject( cTID("Mxm "), cTID("RGBC"), color2 );
executeAction( cTID("ClrR"), desc, DialogModes.NO );
}
Aus Ihrer Sicht lautet der Code also nur noch selectColorRange
. Wenn Sie immer nur eine Farbe auswählen möchten, können Sie natürlich ändern, selectColorRange
dass nur eine Eingabe erfolgt.
Auch wenn Adobe dies als Javascipt-Funktion oder -Objekt hätte, wäre Ihr Code höchstwahrscheinlich nicht mehr als 3 Zeilen kürzer. Da Objekte sowieso bevölkert werden müssen.
Nun, das ist ziemlich einfach, Sie können viele Implementierungen davon finden, indem Sie googeln. Also definieren wir eine Funktion, um dies zu tun:
function hexC(hex) {
// http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
hex = hex.substring(1,7)
bigint = parseInt(hex, 16);
var color = new ActionDescriptor()
color.putDouble(cTID("Rd "), (bigint >> 16) & 255);
color.putDouble(cTID("Grn "), (bigint >> 8) & 255);
color.putDouble(cTID("Bl "), bigint & 255);
return color
}
Sie würden hexC also so aufrufen,
colorReplace(
hexC("#00ff00"),
hexC("#00ff00")
);
statt RGBc.
Ok, jetzt haben wir alle Teile in Ihrem Code an Ort und Stelle. Wenn Sie viele Farben haben, rufen Sie einfach eine for-Schleife auf.
Joonas
Stegathesaurus
Joonas
Vinzenz