photoshop - 创建将 x 轴上的图层移动到所选图层的最宽宽度的动作?
问题描述
我想做一个可变动作,根据其中一个选定图层的最宽宽度来分隔一系列图层。4 个精灵分别为 100、100、100、200 像素宽。它会在 x 轴上将所有图层分开 200 像素,并使图像的总宽度为 800 像素。
如果所有层都相同但不能使其具有可变性,我可以轻松地做到这一点。不确定是否有任何 Photoshop 向导愿意借给我时间制作脚本,但这将非常有帮助!
解决方案
我会做这样的事情。这假定没有组,没有背景图层,图层是普通图层并且使用了所有文档图层。前后(最大为 150 像素):
如果您不需要他们改变Y
位置,0 - layersInfo[i].top
请转到0
第 13 行。
function main()
{
var doc = activeDocument,
layers = doc.layers, //getting all top layers
layersInfo = getInfo().reverse(), //getting layers info and reversing the array because DOM indexes are different order than AM indexes
elWidth = getWidestElement(layersInfo); // getting widest element
doc.resizeCanvas(elWidth * layers.length, doc.height.as("px"), AnchorPosition.TOPLEFT); // resizing canvas size to new width: widest element * number of elements
for (var i = 0; i < layers.length; i++) // for every top layer...
{
doc.activeLayer = layers[i]; // selecting the layer
layers[i].translate(i * elWidth - layersInfo[i].left, 0 - layersInfo[i].top) // moving it to top left corner of each block
}
function getInfo()
{
var layers = 1,
lyrs = [];
while (true)
{
ref = new ActionReference();
ref.putIndex(charIDToTypeID('Lyr '), layers);
try
{
var desc = executeActionGet(ref);
}
catch (err)
{
break;
}
var lyr = {},
bounds = desc.getObjectValue(stringIDToTypeID("bounds"));;
lyr.top = bounds.getDouble(stringIDToTypeID("top"));
lyr.left = bounds.getDouble(stringIDToTypeID("left"));
lyr.width = bounds.getDouble(stringIDToTypeID("width"));
lyrs.push(lyr)
layers++;
}
return lyrs
}; // end of getInfo()
function getWidestElement(layers)
{
var curWidth = 0;
for (var i = 0; i < layers.length; i++)
{
if (layers[i].width > curWidth) curWidth = layers[i].width;
}
return curWidth
}; // end of getWidestElement()
}
var curUnits = app.preferences.rulerUnits;
app.preferences.rulerUnits = Units.PIXELS;
try
{
app.activeDocument.suspendHistory("temp", "main()");
}
catch (e)
{
alert(e + '\nLine: ' + e.line)
}
app.preferences.rulerUnits = curUnits;
推荐阅读
- php - 如何避免从 Github API 收到 403 错误?
- azure - Azure 容器实例卷中是否可以使用符号链接?
- javascript - 使用 React-Konva 在画布上绘制箭头
- php - 使用条件更改挂钩上的订单状态
- javascript - 如何为 promise 数组执行 promise.all,但保留对这些数组的引用?
- javascript - 检索和修改以前分配的事件功能?
- android - 如何修复“AndroidRuntime: FATAL EXCEPTION: main, kotlin.KotlinNullPointerException”?尝试删除存储的数据Sqlite db时出错
- angular - 尝试从获取请求访问数据我得到找不到类型为“对象”的不同支持对象“[对象对象]”
- angular - Angular 在循环中从公司 ID 解析公司名称
- html - 移动设备上的列未居中对齐