(function (global) {
eval(
"@JSXBIN@ES@2.0@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"
);
//批量变更图层叠加模式 Beta 1.0.2 2021-11-01
//© Raymond Yan 2021 (RaymondClr@outlook.com / QQ: 1107677019)
var settings = new Settings();
var userInterface = new UserInterface();
var afterEffect = new AfterEffect();
runScript();
function runScript() {
var buttons = userInterface.getButtons();
buttons.forEach(function (button) {
button.onClick = function () {
afterEffect.changeBlendingMode(BlendingMode[this.mode]);
};
});
}
function Settings() {
//配置按钮排列方向
//可选参数:
//row 排成一行
//column 排成一列
var buttonsDirection = "column";
//配置按钮白名单
//1、按钮排序:列表呈现顺序对应按钮在UI中的显示顺序,调整此顺序可对按钮排序。
//2、按钮文字:中文内容为按钮显示文本,可按个人喜好更改。
//注意事项
//1、请务必遵从列表的现有书写格式进行增删改,否则,可能会引发程序错误。
//2、左侧大写英文不可随意更改,此英文决定了叠加模式的最终结果;如需增删,仅可输入以下文档中列举的单词:
//https://ae-scripting.docsforadobe.dev/layers/avlayer.html?highlight=blending#avlayer-frameblendingtype
var whiteList = {
ADD: "相加",
ALPHA_ADD: "Alpha 添加",
CLASSIC_COLOR_BURN: "经典颜色加深",
CLASSIC_COLOR_DODGE: "经典颜色减淡",
CLASSIC_DIFFERENCE: "经典差值",
COLOR: "颜色",
COLOR_BURN: "颜色加深",
COLOR_DODGE: "颜色减淡",
DANCING_DISSOLVE: "动态抖动溶解",
DARKEN: "变暗",
DARKER_COLOR: "较深的颜色",
DIFFERENCE: "差值",
DISSOLVE: "溶解",
DIVIDE: "相除",
EXCLUSION: "排除",
HARD_LIGHT: "强光",
HARD_MIX: "纯色混合",
HUE: "色相",
LIGHTEN: "变亮",
LIGHTER_COLOR: "较浅的颜色",
LINEAR_BURN: "线性加深",
LINEAR_DODGE: "线性减淡",
LINEAR_LIGHT: "线性光",
LUMINESCENT_PREMUL: "冷光预乘",
LUMINOSITY: "发光度",
MULTIPLY: "相乘",
NORMAL: "正常",
OVERLAY: "叠加",
PIN_LIGHT: "点光",
SATURATION: "饱和度",
SCREEN: "屏幕",
SILHOUETE_ALPHA: "轮廓 Alpha",
SILHOUETTE_LUMA: "轮廓亮度",
SOFT_LIGHT: "柔光",
STENCIL_ALPHA: "模板 Alpha",
STENCIL_LUMA: "模板亮度",
SUBTRACT: "相减",
VIVID_LIGHT: "亮光",
};
return {
getWhiteList: function () {
return whiteList;
},
getDirection: function () {
return buttonsDirection;
},
};
}
function AfterEffect() {
function getActiveItem() {
var activeItem = app.project.activeItem;
var hasActiveItem = (function () {
return activeItem instanceof CompItem && activeItem !== null;
})();
var result = { hasActiveItem: hasActiveItem };
if (!hasActiveItem) return result;
result.item = activeItem;
return result;
}
function getSelectedLayers(activeItem) {
var hasSelectedLayers = (function () {
return activeItem.selectedLayers.length > 0;
})();
var result = { hasSelectedLayers: hasSelectedLayers };
if (!hasSelectedLayers) return result;
result.layer = activeItem.selectedLayers;
return result;
}
function changeBlendingMode(newMode) {
var activeItem = getActiveItem();
if (!activeItem.hasActiveItem) return;
var selectedLayers = getSelectedLayers(activeItem.item);
if (!selectedLayers.hasSelectedLayers) return;
selectedLayers.layer.forEach(function (layer) {
layer.blendingMode = newMode;
});
}
return {
changeBlendingMode: changeBlendingMode,
};
}
function UserInterface() {
function initWindow() {
this.center(), this.show();
}
function reLayoutManager() {
this.layout.layout(true), this.layout.resize();
}
function resizeElements() {
this.layout.resize();
}
function creatPalette() {
return new Window("palette", "", undefined, { resizeable: true });
}
function getMainContainer() {
return this instanceof Panel ? this : creatPalette();
}
function setContainerResponseEvents() {
this.onResizing = this.onResize = resizeElements;
}
function initMainContainer() {
var container = getMainContainer.call(this);
setContainerResponseEvents.call(container);
container.margins = 0;
container.alignChildren = ["fill", "fill"];
return container;
}
function initMainGroup(container) {
var mainGroup = container.add("group");
mainGroup.orientation = settings.getDirection();
mainGroup.alignChildren = ["fill", "fill"];
mainGroup.margins = 5;
mainGroup.spacing = 5;
return mainGroup;
}
var mainContainer = initMainContainer.call(global);
var mainGroup = initMainGroup(mainContainer);
var whiteList = settings.getWhiteList();
for (var enumeratedValue in whiteList) {
if (!BlendingMode.hasOwnProperty(enumeratedValue)) continue;
var currentButton = mainGroup.add("button", undefined, whiteList[enumeratedValue]);
currentButton.preferredSize = [200, 20];
currentButton.mode = enumeratedValue;
}
(mainContainer instanceof Window ? initWindow : reLayoutManager).call(mainContainer);
return {
getButtons: function () {
return Array.from(mainGroup.children);
},
};
}
})(this);