我找到了一个JavaScript,它将使Photoshop中的每一层都成为一个智能对象,这很棒,但我想知道是否有人可以为我调整它。我在AppleScript中使用这个禁令。由于对Javascript了解不多,我希望有些人可以通过调整来选择所有图层,并在当前文件的所有图层中创建一个智能对象。
我正在使用的代码:
// MAIN
var doc = app.activeDocument;
var layers = doc.layers; //array of parent layer/layersets present in active document
for(var i = 0; i < layers.length; i++)
{
if(!layers[i].isBackgroundLayer) createSmartObject(layers[i]);
}
//FUNCTIONS
// 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;
}
}// JavaScript Document
更新 - 澄清
上面的脚本会将每个图层和一个图层一次性更改为智能对象。我想让它选择文档中的每一层,并将其组合成一个智能对象,而不会展平它。
所以,如果我亲自动手做一个例子。我会根据自己的需要制作一个PS文档。为了论证,可以说有3层。我将选择3个图层(这是文档中的所有图层)并右键单击并选择make smart object。现在我有一个智能对象,里面有一层。
答案 0 :(得分:3)
我已经重新编写了代码,因为我知道你不希望这些图层被展平。这应该做的伎俩!
app.preferences.rulerUnits = Units.PIXELS;
getThoseLayers();
createSmartObject();
function getThoseLayers ()
{
var srcDoc = app.activeDocument;
var numOfLayers = srcDoc.layers.length;
// get the top layer
srcDoc.activeLayer = srcDoc.layers[0];
for (var i = numOfLayers -1; i >= 0; i--)
{
if(!srcDoc.layers[i].isBackgroundLayer)
{
addToSelection(srcDoc.layers[i].name)
}
}
}
function addToSelection (alayername)
{
if (alayername == null) return
try
{
var id66 = charIDToTypeID( "slct" );
var desc14 = new ActionDescriptor();
var id67 = charIDToTypeID( "null" );
var ref12 = new ActionReference();
var id68 = charIDToTypeID( "Lyr " );
ref12.putName( id68, alayername );
desc14.putReference( id67, ref12 );
var id69 = stringIDToTypeID( "selectionModifier" );
var id70 = stringIDToTypeID( "selectionModifierType" );
var id71 = stringIDToTypeID( "addToSelection" );
desc14.putEnumerated( id69, id70, id71 );
var id72 = charIDToTypeID( "MkVs" );
desc14.putBoolean( id72, false );
executeAction( id66, desc14, DialogModes.NO );
}
catch(e)
{
alert("Whoops! Problem getting layer " + alayername)
}
}
// create smartobject
function createSmartObject()
{
try
{
var id325 = stringIDToTypeID( "newPlacedLayer" );
executeAction( id325, undefined, DialogModes.NO );
}
catch(e)
{
alert("Whoops! Failed to make smart object " + e)
}
}
它可以抓取所有图层(除了背景)并选择这些图层。我没有广泛测试它,但它似乎在组内工作,即使你有两个相同的层。如果确实失败了,它会告诉你。 希望你觉得它很有用。