[PS CS4-CS6] Скрипт для старой версии.

  • Автор темы Автор темы chesen
  • Дата начала Дата начала
Есть надежный скрипт склеивания сетов в слои. М.б. можно его переделать в смарты?
Код:
// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop

// in case we double clicked the file
app.bringToFront();

// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// $.level = 2;
// debugger; // launch debugger on next line

//==================================================  ===============
// Globals
//==================================================  ===============

///////////////////////////////////////////////////////////////////////////////
// Dispatch
///////////////////////////////////////////////////////////////////////////////

main();


///////////////////////////////////////////////////////////////////////////////
// Functions
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// Function: main
// Usage: the core routine for this script
// Input: <none>
// Return: <none>
///////////////////////////////////////////////////////////////////////////////
function main() {

        var docName = app.activeDocument.name;
        var doc1 = app.documents[docName];
        var layerSetsCount = doc1.layerSets.length;

        for( var i = 0; i < layerSetsCount; i++ )    // run all group
        {
            doc1.layerSets[0].merge();        // one group
        }
}

//===== END
 
А если сперва слепить этим скриптом сеты в слои а затем тем слои в смарты? Чего я недопонимаю?
 
М-да, так звезды сложились. И меня заработал.
Но горбато. Он не группы в смарты пакует, а слои в группах. А это ни к чему.
Плодить такое количество смартов непотребно.

ну значит надо пройтись по группам, а не по слоям
 
Код:
 for( var i =app.activeDocument.layerSets.length-1;i>=0;i--)
    {
        app.activeDocument.activeLayer = app.activeDocument.layerSets[i];
      createSmartObject();
    }
 
Последний вариант вчера пробовал. Не прокатило.
Пишет
createSmartObject(); not function

Сеты сливать нельзя. Они должны потом редактироваться.
В этом и смысл всего геморроя.
 
Последний вариант вчера пробовал. Не прокатило.
Пишет
createSmartObject(); not function

Сеты сливать нельзя. Они должны потом редактироваться.
В этом и смысл всего геморроя.
Ну предполагается, что вы эту функцию из первого скрипта скопируйте. Вы слишком буквально все воспринимаете когда мы вам постим куски кода, предполагается, что вы будете на них менять аналогичные, а не отдельно запускать 'otbline''fp'
 
Ребятки, извините, если что не так.;)
Копирую, вставляю, запускаю.
Пока безуспешно. В любом случае благодарен за помощь.'beer1'
 
Какой теперь эффект? Может, все таки файл примера дадите, с которым не получается?
 
Код:
// enable double clicking from the Macintosh Finder or the Windows Explorer
#target photoshop

// in case we double clicked the file
app.bringToFront();

// debug level: 0-2 (0:disable, 1:break on error, 2:break at beginning)
// $.level = 2;
// debugger; // launch debugger on next line

//==================================================  ===============
// Globals
//==================================================  ===============

///////////////////////////////////////////////////////////////////////////////
// Dispatch
///////////////////////////////////////////////////////////////////////////////

main();


///////////////////////////////////////////////////////////////////////////////
// Functions
///////////////////////////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////////////////////////
// Function: main
// Usage: the core routine for this script
// Input: <none>
// Return: <none>
///////////////////////////////////////////////////////////////////////////////
function main() {

        var docName = app.activeDocument.name;
        var doc1 = app.documents[docName];
        var layerSetsCount = doc1.layerSets.length;

        for( var i =app.activeDocument.layerSets.length-1;i>=0;i--)
    {
        app.activeDocument.activeLayer = app.activeDocument.layerSets[i];
      createSmartObject();
    }
}

//===== END
 
Вот этот код забыли
Код:
// create smartobject from specified layer (default is active layer)
function createSmartObject(layer)
{
   var doc = app.activeDocument;
   var layer = layer != undefined ? layer : doc.activeLayer;
 
   if(doc.activeLayer != layer) doc.activeLayer = layer;
 
   try
   {
      var idnewPlacedLayer = stringIDToTypeID( "newPlacedLayer" );
      executeAction( idnewPlacedLayer, undefined, DialogModes.NO );
      return doc.activeLayer;
   }
   catch(e)
   {
      return undefined;
   }
}
 
  • Спасибо
Реакции: chesen
увы, ничего не происходит.
 
Т.е. самый первый вариант работал, но создавал на каждый слой свой смартобъект, а последний вообще ничего не делает? 'hz'
В коде
Код:
catch(e)
   {
      return undefined;
   }
добавьте печать ошибки вот так
Код:
catch(e)
   {
      alert(e);
      return undefined;
   }
 
Уф. Срослось. ExtendScriptToolkit отсуствует, а через блокнот коряво копи-пастится.
Удобнее работать со смартами, кто знает толк в извращениях.:)
Спасибо форумчанам!