Пакетное преобразования двух файлов в один

  • Автор темы Автор темы xeon54
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

xeon54

Участник
Топикстартер
Сообщения
2
Реакции
0
Есть задача по созданию 3д обложек для интернет магазина. Все это надо сделать пакетно, есть подходящий экшн но с ним проблема.
Дело в том что для каждой позиции лицевая и торцевая часть обложки находятся в 2х разных файлах. Берется лицевая стороная, преобразуется к нужному размеру и далее командой place должна вставлятся торцевая сторона из второго файла.

Как заставить фотошоп вставлять каждый раз новый торец а не тот что просисан в экшене в open\save диалоге?

В написании скриптов я ксожалению не силен, но может есть какой то готовый скриптик для задания переменных для команды place или open.

Еще как вариант подошел бы скриптик, пакетно объединяющий два файла в один
 
Ответ: Пакетное преобразования двух файлов в один

Могу предложить два прохода: один для лица, второй для торца. Оба прохода, то есть условия двух пакетных обработок записываются в один экшн: нажал кнопку и кури бамбук.

У вас типично верстальная задача но Адоба перекрыла пути реализации верстки в ФШ. Поэтому вы заведомо будете идти кривыми путями.

Еще как вариант подошел бы скриптик, пакетно объединяющий два файла в один

По слоям что ли?
 
Ответ: Пакетное преобразования двух файлов в один

Еще есть Variables.. Хотя, если помещенное изображение нужно дополнительно обрабатывать, то без второго прохода никак.

А если скрипт, то что-нть в этом духе..
PHP:
#target photoshop

var docPath = activeDocument.path
var docName = activeDocument.name.match(/(.*)\.[^\.]+$/)[1];
var docExt = activeDocument.name.toLowerCase().match(/[^\.]+$/).toString();

var suffix = "_SF";

var id197 = charIDToTypeID( "Plc " );
    var desc46 = new ActionDescriptor();
    var id198 = charIDToTypeID( "null" );
    desc46.putPath( id198, new File( docPath+"/SecondFiles/"+docName+suffix+"."+docExt ) );
    var id199 = charIDToTypeID( "FTcs" );
    var id200 = charIDToTypeID( "QCSt" );
    var id201 = charIDToTypeID( "Qcsa" );
    desc46.putEnumerated( id199, id200, id201 );
    var id202 = charIDToTypeID( "Ofst" );
        var desc47 = new ActionDescriptor();
        var id203 = charIDToTypeID( "Hrzn" );
        var id204 = charIDToTypeID( "#Rlt" );
        desc47.putUnitDouble( id203, id204, 0.000000 );
        var id205 = charIDToTypeID( "Vrtc" );
        var id206 = charIDToTypeID( "#Rlt" );
        desc47.putUnitDouble( id205, id206, 0.000000 );
    var id207 = charIDToTypeID( "Ofst" );
    desc46.putObject( id202, id207, desc47 );
executeAction( id197, desc46, DialogModes.NO );
Торцевые файлы с суффиксом '_SF' стоит положить во вложенную папку чтобы они не смущали Batch. Но если запускать по кнопке в предварительно открытом файле, то лишнюю папку можно удалить.
 
Ответ: Пакетное преобразования двух файлов в один

Зачем батч если вы пишите скрипт: засасываете список файлов из указанных папок - одна папка для лица, вторая для торца - и в цикле по длине списка запускаете экшны: для лица и для торца. Оттуда же сохраняете результирующий файл.
 
Ответ: Пакетное преобразования двух файлов в один

Например:

PHP:
// маска типа файлов - применяйте маску чтобы в список не попали имена 
// вложенных папок
var mask = '*.jpg';

// вызов диалога выбора папки для ЛИЦА и затем для ТОРЦА
// вторым аргументом можно прописать заранее известный путь
// или сохранять его после сессии в текстовом файле
var faceFolder = Folder.selectDialog("Select a FACE Folder"); 
var sideFolder = Folder.selectDialog("Select a SIDE Folder"); 

// получаем список файлов из указанных папок
var faceList = faceFolder.getFiles( mask ); 
var sideList = sideFolder.getFiles( mask ); 

// при условии что количество файлов лиц и торцов одинаково 
// используется один счетчик файлов лица
for( var i = 0; i < faceList.length; i++ ) {

  // создается новый документ со всеми требуемыми параметрами
  // имя можно взять из имени лица или торца и изменить путь на
  // некий фиксированный 
  var workDoc = app.documents.add ([width] [, height] [, resolution] [, name] [,mode] [, initialFill] [,pixelAspectRatio]);

  // функция openDup открывает исходный файл 
  // копирует Background в рабочий документ
  // и закрывает исходный документ
  openDup(faceList[i], workDoc);
  openDup(sideList[i], workDoc);

  // теперь в рабочем документе - два слоя: лица и сверху - торца
  // с учетом этого пишем экшн который занимается оформлением и
  // запускаем его отсюда:
  app.doAction ( action, from );

  // после выполнения экшна записываем рабочий док и закрываем
  workDoc.saveAs();
  workDoc.close(saveOptions.DONOTSAVECHANGES);

}

// функция openDup открывает файл по полному имени в source 
// и дублирует слой Background в рабочий док - dest
function openDup (source, dest) {
  var tempDoc = app.open(source.fsName);
  tempDoc.activeLayer.duplicate (dest);
  tempDoc.close(saveOptions.DONOTSAVECHANGES);
}

Скрипт является шаблоном.
 
Ответ: Пакетное преобразования двух файлов в один

Всем спасибо, буду разбираться
 
Ответ: Пакетное преобразования двух файлов в один

Лучше выложите конкретные параметры и получите конкретный скрипт.
 
Статус
Закрыто для дальнейших ответов.