1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
|
#target photoshop;
main();
function main() { var inputFolder = Folder.selectDialog("请选择包含子文件夹的文件夹"); if (inputFolder == null) return;
var subfolders = inputFolder.getFiles(Folder.SELECT); for (var i = 0; i < subfolders.length; i++) { var subfolder = subfolders[i]; if (subfolder instanceof Folder) { processSubfolder(subfolder); } } }
function processSubfolder(subfolder) { var fileList = subfolder.getFiles(/\.(exr)$/i); var files = []; while (fileList.length > 2) { for (var a = 0; a < 3; a++) { files.push(fileList.shift()); } var name = decodeURI(files[0].name).replace(/\.[^\.]+$/, ''); stackFiles(files, name, subfolder); files = []; } }
function stackFiles(files, name, subfolder) { var loadLayersFromScript = true; $.evalFile(app.path + "/" + localize("$$$/ScriptingSupport/InstalledScripts=Presets/Scripts") + "/Load Files into Stack.jsx"); loadLayers.intoStack(files); var doc = app.activeDocument; if (doc.layers.length >= 3) { var layer1 = doc.layers[0]; doc.activeLayer = layer1; advancedBlend(false, true, false, layer1); var layer2 = doc.layers[1]; doc.activeLayer = layer2; advancedBlend(false, false, true, layer2); var layer3 = doc.layers[2]; doc.activeLayer = layer3; advancedBlend(true, false, false, layer3);
name = removeSpecialKeywords(name) var saveFile = new File("F:/UdimChannelPacking/" + name + ".exr"); saveEXR(0, 1, saveFile, false, true); doc.close(SaveOptions.DONOTSAVECHANGES); } else { alert("堆叠后的文档中需要至少三个图层。"); } }
function savePSD(saveFile) { var psdSaveOptions = new PhotoshopSaveOptions(); psdSaveOptions.embedColorProfile = true; psdSaveOptions.alphaChannels = true; app.activeDocument.saveAs(saveFile, psdSaveOptions, true, Extension.LOWERCASE); }
function advancedBlend(RED, GREEN, BLUE, layer) { function cTID(s) { return app.charIDToTypeID(s); }; function sTID(s) { return app.stringIDToTypeID(s); };
var desc = new ActionDescriptor(); var ref = new ActionReference(); ref.putEnumerated(cTID('Lyr '), cTID('Ordn'), cTID('Trgt')); desc.putReference(cTID('null'), ref); var layerStyleDesc = new ActionDescriptor(); var channelRestrictionsList = new ActionList(); if (RED) { channelRestrictionsList.putEnumerated(cTID('Chnl'), cTID('Rd ')); } if (GREEN) { channelRestrictionsList.putEnumerated(cTID('Chnl'), cTID('Grn ')); } if (BLUE) { channelRestrictionsList.putEnumerated(cTID('Chnl'), cTID('Bl ')); } layerStyleDesc.putList(sTID('channelRestrictions'), channelRestrictionsList); desc.putObject(cTID('T '), cTID('Lyr '), layerStyleDesc); executeAction(cTID('setd'), desc, DialogModes.NO); }
function saveEXR(compression, alphaChannelOptions, savePath, asCopy, lowerCase) { function c2t(s) { return app.charIDToTypeID(s); } var s2t = function (s) { return app.stringIDToTypeID(s); }; var descriptor = new ActionDescriptor(); var descriptor2 = new ActionDescriptor(); descriptor2.putInteger( s2t( "bitDepth" ), 32 ); descriptor2.putInteger( s2t("compression"), compression ); descriptor2.putInteger( s2t( "alphaChannelOptions" ), alphaChannelOptions ); descriptor.putObject( s2t( "as" ), c2t( "EXRf" ), descriptor2 ); descriptor.putPath( s2t( "in" ), savePath ); descriptor.putBoolean( s2t( "copy" ), asCopy ); descriptor.putBoolean( s2t( "lowerCase" ), lowerCase ); descriptor.putEnumerated( s2t( "saveStage" ), s2t( "saveStageType" ), s2t( "saveSucceeded" )); executeAction( s2t( "save" ), descriptor, DialogModes.NO ); }
function removeSpecialKeywords(name) { return name.replace(/(_AO|_CURV|_XYZ)/g, ""); }
|
评论