Создайте скрипт Photoshop, чтобы добавить текстовый слой в пакет фотографий - PullRequest
0 голосов
/ 07 февраля 2019

Примечание: мой фотошоп - cs6
Мне приказано создать скрипт, который работает с кучей фотографий и добавить текст для каждой фотографии.

У меня есть такие данные (блокнот со списком текстов)пример): 'файл логотипа'
'номер модели'
'номер модели'

logo accuride.jpg
acc-899
acc-567
acc-776
logo bocsh.jpg
boc-777
boc-699
boc-563
logo dell.jpg
65777
89992
45663

В принципе, я уже представляю себе шаг:
1. Найдите, где находится блокнот (список)
2. Прочитайте и проанализируйте список.Чтобы узнать, что за логотип и что писать
3. Сделал фотографию в библиотеке (т.е. logo accuride.jpg)
4. Поместите в активный слой документа
5. Создайте новый текстовый слой, поместите сверхулоготипа
6. Экспортируйте в формате jpg, переименуйте так же, как номер модели
7. удалите весь слой или закройте документ
8. повторите с шага 1

из этого
к этому - цель

Вот что я сделал:

var doc = activeDocument  
var textFile = new File(Folder.desktop+ '/model-number.txt');  
var list = readText (textFile).split('\n'); 

 for (var j = 0; i<list.length; i++) {
     if (list[j].some("logo")) { //jika list j contain kata "logo" maka :

        var artLayerRef = doc.artLayers.add()  
        artLayerRef.kind = LayerKind.TEXT;  
        var textItemRef = artLayerRef.textItem;  
        textItemRef.contents = list[i]  
     }
 }

 function readText(file){  
     if (textFile.exists) {  
    textFile.encoding = "ANSI";  
    textFile.lineFeed = "unix";  
    textFile.open("r", "TEXT", "????");  
    var str = textFile.read();  
    textFile.close();  
    return str;  
    }  
}  

И правда в том, что я очень новичок с этим JS, особенно для сценариев фотошопа.Обычно я создаю сценарий vba для поддержки своего коллажа.
Я трачу ТОЛЬКО на 2 часа ТОЛЬКО на то, чтобы понять, как импортировать изображение в активный слой документа, и все еще не повезло.
Я также представляю себе использование vba для вызова photoshopприложение.Таким образом, данные пришли из таблицы в моей книге.Но теперь только импорт изображения вызывает у меня головокружение.

Я забыл спросить:
1. Как импортировать изображение в слой активного документа?
2. Как проверить подстрокуиз массива строк в JS?Например, когда я нашел слово "логотип *", тогда делаю заявление.

Я очень ценю любое решение, помощь и помощь от вас.
Спасибо.

Юрий

1 Ответ

0 голосов
/ 07 февраля 2019

Существует плагин Photoshop с именем ScriptListener , после его установки Photoshop начнет записывать большинство действий, которые вы выполняете в Photoshop, в виде кода JavaScript диспетчера действий.Это один из способов найти код для вещей, которых вы не можете найти в PDF-справочнике по сценариям.Например, чтобы импортировать изображение, вы можете сделать File > Place Embedded, загрузить выделение, чтобы определить его ограничивающую рамку, обрезать до этого выделения и отменить выбор.Эти действия дадут вам этот код в ScriptingListenerJS.log на вашем рабочем столе:

// =======================================================
var idPlc = charIDToTypeID( "Plc " );
    var desc7 = new ActionDescriptor();
    var idIdnt = charIDToTypeID( "Idnt" );
    desc7.putInteger( idIdnt, 12 );
    var idnull = charIDToTypeID( "null" );
    desc7.putPath( idnull, new File( "/C/Users/Sergey Kritskiy/Desktop/temp/triangles.png" ) );
    var idFTcs = charIDToTypeID( "FTcs" );
    var idQCSt = charIDToTypeID( "QCSt" );
    var idQcsa = charIDToTypeID( "Qcsa" );
    desc7.putEnumerated( idFTcs, idQCSt, idQcsa );
    var idOfst = charIDToTypeID( "Ofst" );
        var desc8 = new ActionDescriptor();
        var idHrzn = charIDToTypeID( "Hrzn" );
        var idPxl = charIDToTypeID( "#Pxl" );
        desc8.putUnitDouble( idHrzn, idPxl, 0.000000 );
        var idVrtc = charIDToTypeID( "Vrtc" );
        var idPxl = charIDToTypeID( "#Pxl" );
        desc8.putUnitDouble( idVrtc, idPxl, 0.000000 );
    var idOfst = charIDToTypeID( "Ofst" );
    desc7.putObject( idOfst, idOfst, desc8 );
executeAction( idPlc, desc7, DialogModes.NO );

// =======================================================
var idsetd = charIDToTypeID( "setd" );
    var desc9 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref1 = new ActionReference();
        var idChnl = charIDToTypeID( "Chnl" );
        var idfsel = charIDToTypeID( "fsel" );
        ref1.putProperty( idChnl, idfsel );
    desc9.putReference( idnull, ref1 );
    var idT = charIDToTypeID( "T   " );
        var ref2 = new ActionReference();
        var idChnl = charIDToTypeID( "Chnl" );
        var idChnl = charIDToTypeID( "Chnl" );
        var idTrsp = charIDToTypeID( "Trsp" );
        ref2.putEnumerated( idChnl, idChnl, idTrsp );
    desc9.putReference( idT, ref2 );
executeAction( idsetd, desc9, DialogModes.NO );

// =======================================================
var idCrop = charIDToTypeID( "Crop" );
    var desc11 = new ActionDescriptor();
    var idDlt = charIDToTypeID( "Dlt " );
    desc11.putBoolean( idDlt, true );
executeAction( idCrop, desc11, DialogModes.NO );

// =======================================================
var idsetd = charIDToTypeID( "setd" );
    var desc13 = new ActionDescriptor();
    var idnull = charIDToTypeID( "null" );
        var ref3 = new ActionReference();
        var idChnl = charIDToTypeID( "Chnl" );
        var idfsel = charIDToTypeID( "fsel" );
        ref3.putProperty( idChnl, idfsel );
    desc13.putReference( idnull, ref3 );
    var idT = charIDToTypeID( "T   " );
    var idOrdn = charIDToTypeID( "Ordn" );
    var idNone = charIDToTypeID( "None" );
    desc13.putEnumerated( idT, idOrdn, idNone );
executeAction( idsetd, desc13, DialogModes.NO );

Это довольно сложно прочитать, есть утилиты, которые помогают немного его украсить (например, SLCFix.js в xbytor's xtools ), но он выполняет свою работу, и вы можете увидеть строки, которые нужно заменить, чтобы поместить функцию make, которая поместит файл в документ.

2) для ваших строк илоготипы, я думаю, что есть разные способы сделать это, я бы сделал это так:

var list = readText(textFile).split('\n'),
    curLogo = "",
    logos = {};

for (var i = 0; i < list.length; i++)
{
    var curLine = list[i].match(/logo.*\.jpg/);
    if (curLine != null)
    {
        curLogo = list[i];
        logos[curLogo] = [];
    }
    else
    {
        logos[curLogo].push(list[i])
    }
}

это даст вам такой объект, который вы можете использовать позже

// {
//     "logo accuride.jpg": [
//         "acc-899",
//         "acc-567",
//         "acc-776"
//     ],
//     "logo bocsh.jpg": [
//         "boc-777",
//         "boc-699",
//         "boc-563"
//     ],
//     "logo dell.jpg": [
//         "65777",
//         "89992",
//         "45663"
//     ]
// }

for (var logo in logos)
{
    $.writeln(logo) // logo accuride.jpg
    $.writeln(logos[logo].length) // 3
}
...