Files
2026-09-24 14:27:23 +08:00

95 lines
2.5 KiB
React

#target photoshop
/*
Uniformly scale the active Photoshop layer.
Input range: 0.1 to 1.0
Default: 0.5 (50%)
*/
(function () {
function showMessage(text) {
alert(text);
}
function hasSelectedLayer() {
var propertyID = stringIDToTypeID("targetLayersIDs");
var reference = new ActionReference();
reference.putProperty(stringIDToTypeID("property"), propertyID);
reference.putEnumerated(
stringIDToTypeID("document"),
stringIDToTypeID("ordinal"),
stringIDToTypeID("targetEnum")
);
try {
var descriptor = executeActionGet(reference);
return descriptor.hasKey(propertyID) &&
descriptor.getList(propertyID).count > 0;
} catch (error) {
return false;
}
}
if (app.documents.length === 0) {
showMessage("打开一个文档以使用此脚本。");
return;
}
if (!hasSelectedLayer()) {
showMessage("请先选择一个需要缩放的图层。");
return;
}
var dialog = new Window("dialog", "缩放选定图层");
dialog.orientation = "column";
dialog.alignChildren = "fill";
var inputGroup = dialog.add("group");
inputGroup.orientation = "row";
inputGroup.add("statictext", undefined, "缩放比例(0.1-1):");
var scaleInput = inputGroup.add("edittext", undefined, "0.5");
scaleInput.characters = 8;
scaleInput.active = true;
var buttonGroup = dialog.add("group");
buttonGroup.alignment = "right";
var cancelButton = buttonGroup.add("button", undefined, "Cancel", { name: "cancel" });
var okButton = buttonGroup.add("button", undefined, "OK", { name: "ok" });
var scaleValue = null;
okButton.onClick = function () {
var value = parseFloat(scaleInput.text.replace(",", "."));
if (isNaN(value) || value < 0.1 || value > 1) {
showMessage("Enter a number from 0.1 to 1.");
scaleInput.active = true;
return;
}
scaleValue = value;
dialog.close(1);
};
cancelButton.onClick = function () {
dialog.close(0);
};
if (dialog.show() !== 1 || scaleValue === null) {
return;
}
try {
var layer = app.activeDocument.activeLayer;
var percent = scaleValue * 100;
layer.resize(
percent,
percent,
AnchorPosition.MIDDLECENTER
);
} catch (error) {
showMessage("Scale failed:\n" + error.message);
}
}());