Ich suche nach einer Möglichkeit, eine Farbfeldbibliothek aus einer JSON-Datei in Adobe Photoshop CS6 zu generieren. Leider kann ich im Web nichts darüber finden und ich weiß nicht, wie ich mein eigenes Plugin/Skript schreiben soll, das dies für mich erledigt.
Wenn es ein kostenloses Skript / Plugin gibt, das dies tut, können Sie mir bitte den Link senden. Wenn nichts vorhanden ist, können Sie mich an einen Ort verweisen, an dem ich eine Vorlage für ein Photoshop CS6-Skript und einen Beispielcode finden kann, der ein Farbfeld aus einem bestimmten Namen und RGB-Werten erstellen kann?
Eine alte Frage, aber vielleicht hilft dies jemandem. Das Erstellen von Skripten auf einer grundlegenden Ebene ist in Photshop sehr einfach und besteht normalerweise aus mehreren Schritten:
Zum Beispiel. Wenn ich ein neues Farbfeld erstelle, zeichnet ScriptingListener diesen Code in einer Protokolldatei auf dem Desktop auf:
// =======================================================
var idMk = charIDToTypeID( "Mk " );
var desc4 = new ActionDescriptor();
var idnull = charIDToTypeID( "null" );
var ref1 = new ActionReference();
var idClrs = charIDToTypeID( "Clrs" );
ref1.putClass( idClrs );
desc4.putReference( idnull, ref1 );
var idUsng = charIDToTypeID( "Usng" );
var desc5 = new ActionDescriptor();
var idNm = charIDToTypeID( "Nm " );
desc5.putString( idNm, "my swatch" );
var idClr = charIDToTypeID( "Clr " );
var desc6 = new ActionDescriptor();
var idRd = charIDToTypeID( "Rd " );
desc6.putDouble( idRd, 62.000000 );
var idGrn = charIDToTypeID( "Grn " );
desc6.putDouble( idGrn, 62.000000 );
var idBl = charIDToTypeID( "Bl " );
desc6.putDouble( idBl, 62.000000 );
var idRGBC = charIDToTypeID( "RGBC" );
desc5.putObject( idClr, idRGBC, desc6 );
var idClrs = charIDToTypeID( "Clrs" );
desc4.putObject( idUsng, idClrs, desc5 );
var idpushToDesignLibraries = stringIDToTypeID( "pushToDesignLibraries" );
desc4.putBoolean( idpushToDesignLibraries, false );
executeAction( idMk, desc4, DialogModes.NO );
Obwohl es sehr schwer zu lesen ist, können Sie sehen, dass es drei Werte für RGB-Farben und ein Namensfeld mit einer my swatch
Zeichenfolge gibt. Also kann ich das in eine Funktion packen und es vergessen:
function createNewSwatch(name, red, green, blue)
{
// =======================================================
var idMk = charIDToTypeID("Mk ");
var desc4 = new ActionDescriptor();
var idnull = charIDToTypeID("null");
var ref1 = new ActionReference();
var idClrs = charIDToTypeID("Clrs");
ref1.putClass(idClrs);
desc4.putReference(idnull, ref1);
var idUsng = charIDToTypeID("Usng");
var desc5 = new ActionDescriptor();
var idNm = charIDToTypeID("Nm ");
desc5.putString(idNm, name); // here goes a name property
var idClr = charIDToTypeID("Clr ");
var desc6 = new ActionDescriptor();
var idRd = charIDToTypeID("Rd ");
desc6.putDouble(idRd, red); // red goes here
var idGrn = charIDToTypeID("Grn ");
desc6.putDouble(idGrn, green); // green goes here
var idBl = charIDToTypeID("Bl ");
desc6.putDouble(idBl, blue); // blue goes here
var idRGBC = charIDToTypeID("RGBC");
desc5.putObject(idClr, idRGBC, desc6);
var idClrs = charIDToTypeID("Clrs");
desc4.putObject(idUsng, idClrs, desc5);
var idpushToDesignLibraries = stringIDToTypeID("pushToDesignLibraries");
desc4.putBoolean(idpushToDesignLibraries, false);
executeAction(idMk, desc4, DialogModes.NO);
}
So können wir später so etwas wie createNewSwatch('cool swatch', 255, 0, 0);
ein neues rotes Farbfeld erstellen.
Das Lesen eines json hängt davon ab, wie der json aussieht. Wenn es sich um einen einfachen Json handelt:
var data = {
colors: [
{
name: "calming grey",
color: [92, 94, 104]
},{
name: "alarming grey",
color: [54, 42, 42]
},]
}
wir können diese Datei einfach auswerten:
$.evalFile('/E/temp/temp_js/myjson.json')
alert(data); // will alert [Object]
wenn es so gestringt ist:
{"colors":[{"name":"calming grey","color":[92,94,104]},{"name":"alarming grey","color":[54,42,42]}]}
Wir müssen eine JSON-Bibliothek einbinden, die Sie im Internet finden können, um die Datei zu lesen und zu analysieren. Aber wie lesen wir eine Datei? Wir googlen das und packen es in eine Funktion, etwa so:
function readFile(link) {
var b = new File(link);
b.open('r');
var str = "";
while(!b.eof)
str += b.readln();
b.close();
return str
}
Jetzt haben wir alles, was wir brauchen, also machen wir einfach eine Schleife, um alle Farben des json durchzugehen:
// to include json library
//@include "json2.js"
function main()
{
try
{
var data = readFile('/E/temp/temp_js/myjson-string.json');
}
catch (e)
{
alert(e);
return false; // if file isn't found, terminate
}
var dataObject = JSON.parse(data); // parse string to an object
//for each element of my dataObject.color array:
for (var i = 0; i < dataObject.colors.length; i++)
{
// create a new swatch with element name and element color
createNewSwatch(dataObject.colors[i].name,
dataObject.colors[i].color[0],
dataObject.colors[i].color[1],
dataObject.colors[i].color[2])
}
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////////////////
// function to read a file
function readFile(link)
{
var b = new File(link);
if (!b.exists) throw 'File ' + link + ' not found';
b.open('r');
var str = "";
while (!b.eof)
str += b.readln();
b.close();
return str
}
//function to create a swatch
function createNewSwatch(name, red, green, blue)
{
// =======================================================
var idMk = charIDToTypeID("Mk ");
var desc4 = new ActionDescriptor();
var idnull = charIDToTypeID("null");
var ref1 = new ActionReference();
var idClrs = charIDToTypeID("Clrs");
ref1.putClass(idClrs);
desc4.putReference(idnull, ref1);
var idUsng = charIDToTypeID("Usng");
var desc5 = new ActionDescriptor();
var idNm = charIDToTypeID("Nm ");
desc5.putString(idNm, name);
var idClr = charIDToTypeID("Clr ");
var desc6 = new ActionDescriptor();
var idRd = charIDToTypeID("Rd ");
desc6.putDouble(idRd, red);
var idGrn = charIDToTypeID("Grn ");
desc6.putDouble(idGrn, green);
var idBl = charIDToTypeID("Bl ");
desc6.putDouble(idBl, blue);
var idRGBC = charIDToTypeID("RGBC");
desc5.putObject(idClr, idRGBC, desc6);
var idClrs = charIDToTypeID("Clrs");
desc4.putObject(idUsng, idClrs, desc5);
var idpushToDesignLibraries = stringIDToTypeID("pushToDesignLibraries");
desc4.putBoolean(idpushToDesignLibraries, false);
executeAction(idMk, desc4, DialogModes.NO);
}
}
main()
Cai