Я ищу способ создать библиотеку образцов из файла JSON в Adobe Photoshop CS6. К сожалению, я ничего не могу найти в Интернете по этому поводу, и я не знаю, как написать свой собственный плагин/скрипт, который сделает это за меня.
Если есть бесплатный скрипт/плагин, который сделает это, пришлите мне ссылку. Если ничего не существует, можете ли вы указать мне место, где я могу найти шаблон для сценария Photoshop CS6 и какой-нибудь пример кода, который может создать образец из заданного имени и значений RGB?
Старый вопрос, но, возможно, это поможет кому-то. Сценарий на базовом уровне в Phootshop очень прост и обычно сводится к нескольким шагам:
Например. Если я создам новый Swatch, ScriptingListener запишет этот код в файл журнала на рабочем столе:
// =======================================================
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 );
хотя это очень трудно прочитать, вы можете видеть, что есть три значения для цветов RGB и есть поле имени со my 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); // 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);
}
так что позже мы можем сделать что-то вроде createNewSwatch('cool swatch', 255, 0, 0);
создания нового красного образца.
Чтение json зависит от того, как выглядит json. Если это простой json, например:
var data = {
colors: [
{
name: "calming grey",
color: [92, 94, 104]
},{
name: "alarming grey",
color: [54, 42, 42]
},]
}
мы можем просто оценить этот файл:
$.evalFile('/E/temp/temp_js/myjson.json')
alert(data); // will alert [Object]
если он приведен в строку следующим образом:
{"colors":[{"name":"calming grey","color":[92,94,104]},{"name":"alarming grey","color":[54,42,42]}]}
нам нужно включить библиотеку json, которую вы можете найти в Интернете , чтобы читать и анализировать файл. Но как мы читаем файл? Мы гуглим это и заворачиваем в функцию, что-то вроде этого:
function readFile(link) {
var b = new File(link);
b.open('r');
var str = "";
while(!b.eof)
str += b.readln();
b.close();
return str
}
Теперь у нас есть все, что нам нужно, поэтому мы просто делаем цикл, чтобы пройтись по всем цветам json:
// 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()
Кай