我试图制作一个脚本,它会在图层上占用一个元素并将其大小恢复到100%。
这是我到目前为止所做的,但由于某种原因它似乎并没有在智能对象上工作。我错过了什么吗?
try {
var doc = app.activeDocument;
var layers = doc.artLayers;
var size = dialog();
for (var i = 0; i < doc.artLayers.length -1; i++) {
var activeLayer = doc.artLayers.getByName(doc.artLayers[i].name);
var orUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PERCENT;
activeLayer.resize(size, size, AnchorPosition.MIDDLECENTER);
app.preferences.rulerUnits = orUnits;
}
} catch (e) {
alert( e );
}
function dialog() {
// Dialog box
var myWindow = new Window("dialog", "Resize Each Layer");
// Keeps things inline
myWindow.orientation = "row";
// Informational text
myWindow.add("statictext", undefined, "New size ( percentage ):");
// This is the box where the size is inserted
var myText = myWindow.add("edittext", undefined, "");
myText.characters = 5;
myText.active = true;
// Ok
myWindow.add("button", undefined, "OK");
if (myWindow.show() == 1) return myText.text;
}
&#13;
每当我尝试运行它时它都无法工作,它根本不会对智能对象起任何作用。
答案 0 :(得分:1)
对我而言,重置智能对象比例的唯一已知方法是用原始的临时psb文件(参考文件)替换当前的智能层。为此,您首先需要找到智能对象fileReference
(临时psb文件的名称,它将在临时文件夹中,您将在层操作描述符中找到它),然后将其放置在文档中(使用文件>放置嵌入式),将其置于原始图层的坐标处,然后删除原始图层。这是一种算法:
var originalLayer = activeDocument.activeLayer,
bounds = activeDocument.activeLayer.bounds,
smartObjectName = getFileReference() //get file reference here
placeLayer(Folder.temp + "/" + smartObjectName) //function to place layer with path to layer as an argument
centerLayerBasedOnBounds(bounds)
originalLayer.remove()
答案 1 :(得分:1)
通过调整这里找到的代码,我可以使用ActionReference获得活动层的未缩放尺寸; https://community.adobe.com/t5/photoshop/how-can-i-capture-a-smart-object-s-original-dimension-via-scripts/td-p/9679328?page=1
// works on active layer
function getUnscaledLayerDimensions() {
var ref = new ActionReference();
ref.putEnumerated(
charIDToTypeID("Lyr "),
charIDToTypeID("Ordn"),
charIDToTypeID("Trgt")
);
var obj = executeActionGet(ref).getObjectValue(
stringIDToTypeID("smartObjectMore")
);
var _tmp = obj.getObjectValue(stringIDToTypeID("size"));
return {
width: _tmp.getDouble(stringIDToTypeID("width")),
height: _tmp.getDouble(stringIDToTypeID("height")),
};
}
然后您可以将这些尺寸与图层边界一起使用,以将size()调整为最大100%
答案 2 :(得分:0)
layer.resize()是相对调整大小,而不是绝对调整大小,因此,如果您告诉它将调整大小调整为100%,那将无济于事-您正在告诉它将调整大小调整为当前大小。您需要知道当前的比例才能做到这一点(我认为这是不公开的)。
我认为无法通过脚本或录制的动作来重置智能对象的比例。 Photoshop的API对智能对象的支持不是很好...