画布尺寸修改插件

This commit is contained in:
tianmo committed 2026-09-15 18:30:57 +08:00
1 parent 6a800280d4
commit d2d5d747df
1 file changed
+171
@@ -0,0 +1,171 @@
#target photoshop
/*
Uniformly resize the current canvas area.
Scale range: 0.1 to 5
Default scale: 2
Layer contents are not scaled. The canvas expands or crops
equally from its center according to the entered scale.
*/
(function () {
function showMessage(text) {
alert(text);
}
if (app.documents.length === 0) {
showMessage("请先打开一个文档。");
return;
}
var document = app.activeDocument;
var currentWidth = Math.round(document.width.as("px"));
var currentHeight = Math.round(document.height.as("px"));
var dialog = new Window("dialog", "修改画布大小");
dialog.orientation = "column";
dialog.alignChildren = "fill";
// Method 1: uniformly resize with a scale slider and numeric input.
var scalePanel = dialog.add("panel", undefined, "方式一:等比例缩放");
scalePanel.orientation = "column";
scalePanel.alignChildren = "fill";
var scaleMode = scalePanel.add("radiobutton", undefined, "使用缩放倍率");
scaleMode.value = true;
var scaleGroup = scalePanel.add("group");
scaleGroup.orientation = "row";
var scaleSlider = scaleGroup.add("slider", undefined, 2, 0.1, 5);
scaleSlider.preferredSize.width = 220;
var scaleInput = scaleGroup.add("edittext", undefined, "2");
scaleInput.characters = 6;
scaleGroup.add("statictext", undefined, "倍(0.1 - 5)");
// Method 2: enter the target canvas width and height independently.
var sizePanel = dialog.add("panel", undefined, "方式二:指定宽高");
sizePanel.orientation = "column";
sizePanel.alignChildren = "left";
var sizeMode = sizePanel.add("radiobutton", undefined, "使用指定宽度和高度");
var widthGroup = sizePanel.add("group");
widthGroup.orientation = "row";
widthGroup.add("statictext", undefined, "宽度:");
var widthInput = widthGroup.add("edittext", undefined, String(currentWidth));
widthInput.characters = 10;
widthGroup.add("statictext", undefined, "px");
var heightGroup = sizePanel.add("group");
heightGroup.orientation = "row";
heightGroup.add("statictext", undefined, "高度:");
var heightInput = heightGroup.add("edittext", undefined, String(currentHeight));
heightInput.characters = 10;
heightGroup.add("statictext", undefined, "px");
var buttonGroup = dialog.add("group");
buttonGroup.alignment = "right";
var cancelButton = buttonGroup.add("button", undefined, "取消", { name: "cancel" });
var okButton = buttonGroup.add("button", undefined, "确定", { name: "ok" });
var resultWidth = null;
var resultHeight = null;
function parseNumber(text) {
return parseFloat(text.replace(",", "."));
}
function formatScale(value) {
return String(Math.round(value * 100) / 100);
}
function updateControlState() {
scaleSlider.enabled = scaleMode.value;
scaleInput.enabled = scaleMode.value;
widthInput.enabled = sizeMode.value;
heightInput.enabled = sizeMode.value;
}
scaleMode.onClick = function () {
scaleMode.value = true;
sizeMode.value = false;
updateControlState();
};
sizeMode.onClick = function () {
sizeMode.value = true;
scaleMode.value = false;
updateControlState();
};
scaleSlider.onChanging = function () {
scaleInput.text = formatScale(scaleSlider.value);
};
scaleInput.onChange = function () {
var value = parseNumber(scaleInput.text);
if (!isNaN(value) && value >= 0.1 && value <= 5) {
scaleSlider.value = value;
scaleInput.text = formatScale(value);
}
};
okButton.onClick = function () {
if (scaleMode.value) {
var scaleValue = parseNumber(scaleInput.text);
if (isNaN(scaleValue) || scaleValue < 0.1 || scaleValue > 5) {
showMessage("请输入 0.1 到 5 之间的缩放倍率。");
scaleInput.active = true;
return;
}
resultWidth = Math.max(1, Math.round(currentWidth * scaleValue));
resultHeight = Math.max(1, Math.round(currentHeight * scaleValue));
} else {
var widthValue = parseNumber(widthInput.text);
var heightValue = parseNumber(heightInput.text);
if (isNaN(widthValue) || widthValue <= 0) {
showMessage("请输入有效的画布宽度。");
widthInput.active = true;
return;
}
if (isNaN(heightValue) || heightValue <= 0) {
showMessage("请输入有效的画布高度。");
heightInput.active = true;
return;
}
resultWidth = Math.round(widthValue);
resultHeight = Math.round(heightValue);
}
dialog.close(1);
};
cancelButton.onClick = function () {
dialog.close(0);
};
updateControlState();
if (dialog.show() !== 1 || resultWidth === null || resultHeight === null) {
return;
}
try {
document.resizeCanvas(
new UnitValue(resultWidth, "px"),
new UnitValue(resultHeight, "px"),
AnchorPosition.MIDDLECENTER
);
} catch (error) {
showMessage("修改画布失败:\n" + error.message);
}
}());