[PS CC-CC2021] Пакетная цветокоррекция по образцам

Dimon_

Участник
Топикстартер
Сообщения
4
Реакции
6
Здравствуйте.
Столкнулся с проблемой и не знаю, как её решить.

У меня есть две папки с одинаковым количеством файлов в каждой. Имена файлов в обоих папках совпадают.
Чтобы было понятнее: у меня есть папка "Folder1" с файлами "File001", "File002" и т д. И папка "Folder2" с таким же количеством фалов с теми же именами.
Каждому файлу в первой папке надо откорректировать цвета так, чтобы они соответствовали цветам одноимённого файла из второй папки.

Казалось бы, написать экшн весьма просто. Мне и нужно-то:

1. Открыть "File001" в папке "Folder1"
2. Открыть "File001" в папке "Folder2".
3. В первом файле сделать "Изображение"-"Коррекция"-"Подобрать цвет". В качестве источника выбрать файл с тем же именем, открытый во второй вкладке, задать процент ослабления.
4. Сохранить и закрыть отредактированный файл. Закрыть второй файл, который был образцом.

Проблема в том, что при исполнении экшна фотошоп будет игнорировать все имена файлов. Я не смогу выполнить даже п.2. из моего списка, - в этом действии возможно прописать только конкретное фиксированное имя конкретного файла.
Точнее, я не знаю способа, чтобы прописать его в виде переменной, обозначающей текущее имя файла в пакетной обработке.

Кто-нибудь может подсказать путь, в котором надо искать?
Заранее спасибо!
 
Последнее редактирование:

Dimon_

Участник
Топикстартер
Сообщения
4
Реакции
6
Методичка есть? (с) студенческий анекдот
Со скриптами в ФШ вообще дела не имел. Мне бы хоть стартовый набросок какой бы... :)
 
Последнее редактирование:

Любимцев

15 лет на форуме
Сообщения
4 198
Реакции
2 055
фотошоп будет игнорировать все имена файлов
File > Automate > Batсh...
не оно?
1673636988627.png
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
примерно так, но могут быть траблы из-за того что имена файлов одинаковые, а как по индексу или еще чему сделать мне быстро не сообразить )

JavaScript:
var aFolder = Folder("/path/to/folder1");
var bFolder = Folder("/path/to/folder2");
function main()
{
    var allFiles = aFolder.getFiles();
    for(var i=0;i<allFiles.length;i++)
    {
            var aFile = allFiles[i];
            var bFile = File(bFolder+"/"+aFile.name);
            
            var bRef = app.open(bFile);
            var aRef = app.open(aFile);
            
            var idmatchColor = stringIDToTypeID( "matchColor" );
    var desc6 = new ActionDescriptor();
    var idlightness = stringIDToTypeID( "lightness" );
    desc6.putInteger( idlightness, 100 );
    var idcolorRange = stringIDToTypeID( "colorRange" );
    desc6.putInteger( idcolorRange, 100 );
    var idfade = stringIDToTypeID( "fade" );
    desc6.putInteger( idfade, 0 );
    var idselection = stringIDToTypeID( "selection" );
    desc6.putBoolean( idselection, true );
    var idsource = stringIDToTypeID( "source" );
        var ref2 = new ActionReference();
        var idlayer = stringIDToTypeID( "layer" );
        ref2.putName( idlayer, "Layer 1" );
        var iddocument = stringIDToTypeID( "document" );
        ref2.putName( iddocument, bFile.name );
    desc6.putReference( idsource, ref2 );
executeAction( idmatchColor, desc6, DialogModes.NO );

aFile.close(SaveOptions.SAVECHANGES);
bFile.close(SaveOptions.DONOTSAVECHANGES);           
    }
}

try{
main()
}catch(e){alert(e+":"+e.line)}
 
  • Спасибо
Реакции: Chiga и Dimon_

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
для интерактивности match color заменить DialogModes.NO на DialogModes.ALL
 

Любимцев

15 лет на форуме
Сообщения
4 198
Реакции
2 055

Dimon_

Участник
Топикстартер
Сообщения
4
Реакции
6

Skvoznyak, спасибо огромное! Скрипт допилил до рабочего состояния. Там надо было чуть подправить вызов параметров для дескриптора в matchColor, разобраться с Source для неё и вместо "aFile.close" должно быть "aRef.close".
Но это абсолютнейшие мелочи, - я и просил путь, а не готовый скрипт.
Мне дали удочку, а уж рыбы я сам наловлю :)
Ещё раз спасибо. Задача решена.
 

Skvoznyak

15 лет на форуме
Сообщения
5 500
Реакции
2 168
Выложите исправленный-то для будущих поколений
С aFile да, немудрено в час ночи промахнуться )
 

Dimon_

Участник
Топикстартер
Сообщения
4
Реакции
6
Для тех, кто придёт сюда позже по запросам с поисковика:

JavaScript:
var aFolder = Folder("X:\Folder2");
var bFolder = Folder("X:\Folder1");

function main()
{
    var allFiles = aFolder.getFiles();
    for(var i=0;i<allFiles.length;i++)
    {
            var aFile = allFiles[i];
            var bFile = File(bFolder+"/"+aFile.name);

            var aRef = app.open(aFile);           
            var bRef = app.open(bFile);

            
var idmatchColor = stringIDToTypeID( "matchColor" );
    var desc3 = new ActionDescriptor();
    var idLght = charIDToTypeID( "Lght" );
    desc3.putInteger( idLght, 100 );
    var idClrR = charIDToTypeID( "ClrR" );
    desc3.putInteger( idClrR, 100 );
    var idFade = charIDToTypeID( "Fade" );
    desc3.putInteger( idFade, 30 );
    var idneutralizeColor = stringIDToTypeID( "neutralizeColor" );
    desc3.putBoolean( idneutralizeColor, false );
    var idfsel = charIDToTypeID( "fsel" );
    desc3.putBoolean( idfsel, true );
    var idSrce = charIDToTypeID( "Srce" );
        var ref1 = new ActionReference();
        var idLyr = charIDToTypeID( "Lyr " );
        var idBckg = charIDToTypeID( "Bckg" );
        ref1.putProperty( idLyr, idBckg );
        var idDcmn = charIDToTypeID( "Dcmn" );
        ref1.putName( idDcmn, bFile.name );
    desc3.putReference( idSrce, ref1 );
executeAction( idmatchColor, desc3, DialogModes.NO );
aRef.close(SaveOptions.DONOTSAVECHANGES);
bRef.close(SaveOptions.SAVECHANGES);
    }
}

try{
main()
}
catch(e){alert(e+":"+e.line)}

В папке "Folder1" должны лежать файлы, в которых будет заменяться цвет. Файлы будут перезаписаны.
В папке "Folder2" должны лежать файлы с теми же именами, что и в предыдущей папке. Из этих файлов будет браться цвет. Эти файлы останутся без изменений.
В "idFade, 30" нужно указать число от 0 до 100 - это параметр "Ослабление" в диалоге "Подобрать цвет".
 
  • Спасибо
Реакции: ITIT и Chiga