Как создать библиотеку образцов из файла Json?

Я ищу способ создать библиотеку образцов из файла JSON в Adobe Photoshop CS6. К сожалению, я ничего не могу найти в Интернете по этому поводу, и я не знаю, как написать свой собственный плагин/скрипт, который сделает это за меня.

Если есть бесплатный скрипт/плагин, который сделает это, пришлите мне ссылку. Если ничего не существует, можете ли вы указать мне место, где я могу найти шаблон для сценария Photoshop CS6 и какой-нибудь пример кода, который может создать образец из заданного имени и значений RGB?

Как выглядит JSON?

Ответы (1)

Старый вопрос, но, возможно, это поможет кому-то. Сценарий на базовом уровне в Phootshop очень прост и обычно сводится к нескольким шагам:

  • Если вы понятия не имеете о Javascript, вы идете в академию кода, udemy или любой другой сайт, который вам нравится, и изучаете базовые вещи, такие как переменные, массивы и функции — это займет всего несколько часов;
  • вы загружаете и устанавливаете плагин ScriptingListener . Этот плагин записывает большинство вещей, которые происходят в Photoshop, в виде кода javascript, который выглядит уродливо, но кого это волнует;
  • вы гуглите вещи, которые вы не понимаете или не знаете (например, как читать json-файл) — javascript очень популярен, если вы хотите что-то сделать, тысячи людей пытались сделать то же самое;
  • вы оборачиваете это все в скрипт.

Например. Если я создам новый 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()