Photoshop脚本图层缩放问题:边框计算未按画布高度执行
Photoshop脚本:按画布高度百分比设置边框缩放图层问题解决
需求说明
需要将与画布等宽等高的图层缩小,留出边框:
- 边框宽度按**画布高度的5%**计算
- 新宽度 = 原画布宽度 - 2倍边框宽度
- 新高度按原画布宽高比缩放(保持图层比例)
示例:画布1000px×3000px时,边框宽度为150px(3000×0.05),图层最终尺寸应为700px×2100px。
遇到的问题
实际运行脚本时,图层是按画布宽度的百分比缩减,而非预期的按画布高度百分比计算边框。尝试过在脚本不同位置切换标尺单位(PERCENT/PIXELS)、用layer.bounds获取图层尺寸,均未解决问题。
问题原因
原脚本错误混淆了画布的百分比单位数值和图层缩放百分比参数的含义:
当标尺单位设为PERCENT时,doc.width和doc.height的返回值是100(画布自身在百分比单位下的宽高都是100%),计算出的borderWidth是5(100×0.05),最终resize(90, ...)是将图层缩至自身尺寸的90%,这自然是按画布宽度的百分比缩放,不符合需求。
修正后的代码
方式一:通过缩放百分比实现
var doc = app.activeDocument; var layer = doc.activeLayer; // 切换到像素单位,确保所有尺寸计算基于像素值 app.preferences.rulerUnits = Units.PIXELS; var canvasWidth = doc.width.value; var canvasHeight = doc.height.value; // 按画布高度的5%计算边框的像素宽度 var borderWidth = canvasHeight * 0.05; // 计算目标尺寸,保持画布原比例 var newWidth = canvasWidth - 2 * borderWidth; var newHeight = newWidth * (canvasHeight / canvasWidth); // 换算成图层的缩放百分比(原图层与画布等大) var scaleWidth = (newWidth / canvasWidth) * 100; var scaleHeight = (newHeight / canvasHeight) * 100; // 切换回百分比单位执行缩放 app.preferences.rulerUnits = Units.PERCENT; layer.resize(scaleWidth, scaleHeight, AnchorPosition.MIDDLECENTER); // 还原标尺单位为像素,避免影响后续操作 app.preferences.rulerUnits = Units.PIXELS;
方式二:直接设置图层边界(更直观)
var doc = app.activeDocument; var layer = doc.activeLayer; app.preferences.rulerUnits = Units.PIXELS; var canvasWidth = doc.width.value; var canvasHeight = doc.height.value; var borderWidth = canvasHeight * 0.05; // 计算目标区域的左上角坐标和右下角坐标 var left = borderWidth; var top = borderWidth; var right = canvasWidth - borderWidth; var bottom = top + (right - left) * (canvasHeight / canvasWidth); // 直接调整图层到目标边界 layer.resizeToBounds(left, top, right, bottom); // 还原标尺单位 app.preferences.rulerUnits = Units.PIXELS;
说明
两种方式都先切换到像素单位完成精确计算,避免百分比单位带来的数值混淆:
- 方式一通过计算缩放百分比,调用
resize方法实现 - 方式二直接计算图层的目标边界,调用
resizeToBounds更直观,适合需要精确定位的场景
内容的提问来源于stack exchange,提问作者aye cee
相关产品推荐
相关产品推荐

