Files
2026-09-15 18:30:57 +08:00

172 lines
5.3 KiB
React
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#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);
}
}());