文章目录

  • 1.插件界面
  • 2.关键代码-创建暗调通道蒙板
  • 3.作者答疑

  PS是一款栅格图像编辑软件,具有许多强大的功能,本文演示如何通过脚本实现创建暗调通道相关功能,展示从互联网收集而来的一个小插件,供大家学习交流,请勿用于商业用途。

1.插件界面

  本文界面是一系列功能的一部分,将逐步展示,但是功能界面是共同的,如下图所示:

2.关键代码-创建暗调通道蒙板

  大家可通过源代码阅读,来掌握相关技巧,源代码如下:

// jamEngine.jsxinc v4.4 (minified)
if (typeof jamEngine !== 'object') {var jamEngine = {};(function () {var that;jamEngine.meaningfulIds = false;jamEngine.parseFriendly = false;var conflictingStringIdStrs = {"'Algn'": ["align", "alignment"],"'AntA'": ["antiAlias", "antiAliasedPICTAcquire"],"'BckL'": ["backgroundLayer", "backgroundLevel"],"'BlcG'": ["blackGenerationType", "blackGenerationCurve"],"'BlcL'": ["blackLevel", "blackLimit"],"'Blks'": ["blacks", "blocks"],"'BlrM'": ["blurMethod", "blurMore"],"'BrgC'": ["brightnessEvent", "brightnessContrast"],"'BrsD'": ["brushDetail", "brushesDefine"],"'Brsh'": ["brush", "brushes"],"'Clcl'": ["calculation", "calculations"],"'ClrP'": ["colorPalette", "coloredPencil"],"'Cnst'": ["constant", "constrain"],"'CntC'": ["centerCropMarks", "conteCrayon"],"'Cntr'": ["center", "contrast"],"'CrtD'": ["createDroplet", "createDuplicate"],"'CstP'": ["customPalette", "customPhosphors"],"'Cstm'": ["custom", "customPattern"],"'Drkn'": ["darken", "darkness"],"'Dstr'": ["distort", "distortion", "distribute", "distribution"],"'Dstt'": ["desaturate", "destWhiteMax"],"'FlIn'": ["fileInfo", "fillInverse"],"'Gd  '": ["good", "guide"],"'GnrP'": ["generalPreferences", "generalPrefs", "preferencesClass"],"'GrSt'": ["grainStippled", "graySetup"],"'Grdn'": ["gradientClassEvent", "gridMinor"],"'Grn '": ["grain", "green"],"'Grns'": ["graininess", "greens"],"'HstP'": ["historyPreferences", "historyPrefs"],"'HstS'": ["historyState", "historyStateSourceType"],"'ImgP'": ["imageCachePreferences", "imagePoint"],"'In  '": ["in", "stampIn"],"'IntW'": ["interfaceWhite", "intersectWith"],"'Intr'": ["interfaceIconFrameDimmed", "interlace", "interpolation", "intersect"],"'JPEG'": ["JPEG", "JPEGFormat"],"'LghD'": ["lightDirection", "lightDirectional"],"'LghO'": ["lightOmni", "lightenOnly"],"'LghS'": ["lightSource", "lightSpot"],"'Lns '": ["lens", "lines"],"'Mgnt'": ["magenta", "magentas"],"'MrgL'": ["mergeLayers", "mergedLayers"],"'Mxm '": ["maximum", "maximumQuality"],"'NTSC'": ["NTSC", "NTSCColors"],"'NmbL'": ["numberOfLayers", "numberOfLevels"],"'PlgP'": ["pluginPicker", "pluginPrefs"],"'Pncl'": ["pencilEraser", "pencilWidth"],"'Pnt '": ["paint", "point"],"'Prsp'": ["perspective", "perspectiveIndex"],"'PrvM'": ["previewMacThumbnail", "previewMagenta"],"'Pstr'": ["posterization", "posterize"],"'RGBS'": ["RGBSetup", "RGBSetupSource"],"'Rds '": ["radius", "reds"],"'ScrD'": ["scratchDisks", "screenDot"],"'ShdI'": ["shadingIntensity", "shadowIntensity"],"'ShpC'": ["shapeCurveType", "shapingCurve"],"'ShrE'": ["sharpenEdges", "shearEd"],"'Shrp'": ["sharpen", "sharpness"],"'SplC'": ["splitChannels", "supplementalCategories"],"'Spot'": ["spot", "spotColor"],"'SprS'": ["separationSetup", "sprayedStrokes"],"'StrL'": ["strokeLength", "strokeLocation"],"'Strt'": ["saturation", "start"],"'TEXT'": ["char", "textType"],"'TIFF'": ["TIFF", "TIFFFormat"],"'TglO'": ["toggleOptionsPalette", "toggleOthers"],"'TrnG'": ["transparencyGamutPreferences", "transparencyGrid", "transparencyGridSize"],"'TrnS'": ["transferSpec", "transparencyShape", "transparencyStop"],"'Trns'": ["transparency", "transparent"],"'TxtC'": ["textClickPoint", "textureCoverage"],"'TxtF'": ["textureFile", "textureFill"],"'UsrM'": ["userMaskEnabled", "userMaskOptions"],"'c@#^'": ["inherits", "pInherits"],"'comp'": ["comp", "sInt64"],"'doub'": ["floatType", "IEEE64BitFloatingPoint", "longFloat"],"'long'": ["integer", "longInteger", "sInt32"],"'magn'": ["magnitude", "uInt32"],"'null'": ["null", "target"],"'shor'": ["sInt16", "sMInt", "shortInteger"],"'sing'": ["IEEE32BitFloatingPoint", "sMFloat", "shortFloat"]};jamEngine.getConflictingStringIdStrs = function (charIdStr) {return conflictingStringIdStrs[charIdStr] || null;};jamEngine.uniIdStrToId = function (uniIdStr) {var id = 0;if (typeof uniIdStr === 'string') {if ((uniIdStr.length === (1 + 4 + 1)) && (uniIdStr.charAt(0) === "'") && (uniIdStr.charAt(5) === "'")) {id = app.charIDToTypeID(uniIdStr.substring(1, 5));} else {id = app.stringIDToTypeID(uniIdStr);}}return id;};var smallestHashValue = app.charIDToTypeID("    ");jamEngine.idToUniIdStrs = function (id) {var charIdStr = "";var stringIdStr = app.typeIDToStringID(id);if (id >= smallestHashValue) {charIdStr = "'" + app.typeIDToCharID(id) + "'";if (stringIdStr !== "") {if (charIdStr in conflictingStringIdStrs) {stringIdStr = conflictingStringIdStrs[charIdStr];}}}return [charIdStr, stringIdStr];};jamEngine.equivalentUniIdStrs = function (uniIdStr1, uniIdStr2) {return this.uniIdStrToId(uniIdStr1) === this.uniIdStrToId(uniIdStr2);};function putInReference(ref, containers) {if (containers.constructor === Array) {var count = containers.length;for (var i = 0; i < count; i++) {var container = that.parseCompact(containers[i]);var desiredClassId = that.uniIdStrToId(container[0]);var typedValue = that.parseCompact(container[1]);var form = typedValue[0];var value = typedValue[1];switch (form) {case"<class>":ref.putClass(desiredClassId);break;case"<enumerated>":var enumerated = that.parseCompact(value);ref.putEnumerated(desiredClassId, that.uniIdStrToId(enumerated[0]), that.uniIdStrToId(enumerated[1]));break;case"<identifier>":ref.putIdentifier(desiredClassId, value);break;case"<index>":ref.putIndex(desiredClassId, value);break;case"<name>":ref.putName(desiredClassId, value);break;case"<offset>":ref.putOffset(desiredClassId, value);break;case"<property>":ref.putProperty(desiredClassId, that.uniIdStrToId(value));break;default:throw new Error("[jamEngine putInReference] Unknown reference form: " + form);break;}}} else {throw new Error("[jamEngine putInReference] JavaScript array expected");}}function putInList(list, items) {if (items.constructor === Array) {var count = items.length;for (var i = 0; i < count; i++) {var item = that.parseCompact(items[i]);var type = item[0];var value = item[1];switch (type) {case"<boolean>":list.putBoolean(value);break;case"<class>":list.putClass(that.uniIdStrToId(value));break;case"<data>":list.putData(value);break;case"<double>":list.putDouble(value);break;case"<enumerated>":var enumerated = that.parseCompact(value);list.putEnumerated(that.uniIdStrToId(enumerated[0]), that.uniIdStrToId(enumerated[1]));break;case"<integer>":list.putInteger(value);break;case"<largeInteger>":list.putLargeInteger(value);break;case"<list>":var actionList = new ActionList();putInList(actionList, value);list.putList(actionList);break;case"<object>":var object = that.parseCompact(value);if (object[1]) {var actionDescriptor = new ActionDescriptor();putInDescriptor(actionDescriptor, object[1]);list.putObject(that.uniIdStrToId(object[0]), actionDescriptor);} else {list.putClass(that.uniIdStrToId(object[0]));}break;case"<path>":var fileRef = new File(value);list.putPath(fileRef);break;case"<reference>":var actionReference = new ActionReference();putInReference(actionReference, value);list.putReference(actionReference);break;case"<string>":list.putString(value);break;case"<unitDouble>":var unitDouble = that.parseCompact(value);list.putUnitDouble(that.uniIdStrToId(unitDouble[0]), unitDouble[1]);break;default:throw new Error("[jamEngine putInList] Unknown list type: " + type);break;}}} else {throw new Error("[jamEngine putInList] JavaScript array expected");}}function putInDescriptor(desc, members) {if (members.constructor === Object) {for (var key in members) {if (members.hasOwnProperty(key)) {var keyID = that.uniIdStrToId(key);var member = that.parseCompact(members[key]);var type = member[0];var value = member[1];switch (type) {case"<boolean>":desc.putBoolean(keyID, value);break;case"<class>":desc.putClass(keyID, that.uniIdStrToId(value));break;case"<data>":desc.putData(keyID, value);break;case"<double>":desc.putDouble(keyID, value);break;case"<enumerated>":var enumerated = that.parseCompact(value);desc.putEnumerated(keyID, that.uniIdStrToId(enumerated[0]), that.uniIdStrToId(enumerated[1]));break;case"<integer>":desc.putInteger(keyID, value);break;case"<largeInteger>":desc.putLargeInteger(keyID, value);break;case"<list>":var actionList = new ActionList();putInList(actionList, value);desc.putList(keyID, actionList);break;case"<object>":var object = that.parseCompact(value);if (object[1]) {var actionDescriptor = new ActionDescriptor();putInDescriptor(actionDescriptor, object[1]);desc.putObject(keyID, that.uniIdStrToId(object[0]), actionDescriptor);} else {desc.putClass(keyID, that.uniIdStrToId(object[0]));}break;case"<path>":var fileRef = new File(value);desc.putPath(keyID, fileRef);break;case"<reference>":var actionReference = new ActionReference();putInReference(actionReference, value);desc.putReference(keyID, actionReference);break;case"<string>":desc.putString(keyID, value);break;case"<unitDouble>":var unitDouble = that.parseCompact(value);desc.putUnitDouble(keyID, that.uniIdStrToId(unitDouble[0]), unitDouble[1]);break;default:throw new Error("[jamEngine putInDescriptor] Unknown descriptor type: " + type);break;}}}} else {throw new Error("[jamEngine putInDescriptor] JavaScript object expected");}}var contextRules = {"'Algn'": {"<classKey>": {"bevelEmboss": "align","frameFX": "align","gradientFill": "align","gradientLayer": "align","patternFill": "align","patternLayer": "align"}, "<event>": "align", "<key>": "alignment"},"'AntA'": {"<class>": "antiAliasedPICTAcquire", "<key>": "antiAlias"},"'BckL'": {"<class>": "backgroundLayer", "<key>": "backgroundLevel"},"'BlcG'": {"<enumType>": "blackGenerationType", "<key>": "blackGenerationCurve"},"'BlcL'": {"<classKey>": {"'GEfc'": "blackLevel", "CMYKSetup": "blackLimit"},"<eventKey>": {"reticulation": "blackLevel"}},"'Blks'": {"<typeValue>": {"colors": "blacks", "extrudeType": "blocks"}},"'BlrM'": {"<enumType>": "blurMethod", "<event>": "blurMore", "<key>": "blurMethod"},"'BrgC'": {"<class>": "brightnessContrast", "<event>": "brightnessContrast"},"'BrsD'": {"<enumValue>": "brushesDefine", "<key>": "brushDetail"},"'Brsh'": {"<class>": "brush", "<key>": "brushes"},"'Clcl'": {"<class>": "calculation", "<enumValue>": "calculations", "<key>": "calculation"},"'ClrP'": {"<typeValue>": {"'GEft'": "coloredPencil"},"<enumType>": "colorPalette","<event>": "coloredPencil"},"'Cnst'": {"<classKey>": {"channelMatrix": "constant"}, "<unknown>": "constrain"},"'CntC'": {"<typeValue>": {"'GEft'": "conteCrayon"}, "<event>": "conteCrayon", "<key>": "centerCropMarks"},"'Cntr'": {"<classKey>": {"'GEfc'": "contrast","brightnessContrast": "contrast","document": "center","polygon": "center","quadrilateral": "center"},"<eventKey>": {"adaptCorrect": "contrast","brightnessEvent": "contrast","grain": "contrast","halftoneScreen": "contrast","sumie": "contrast","tornEdges": "contrast","waterPaper": "contrast"},"<enumValue>": "center"},"'CrtD'": {"<enumValue>": "createDuplicate", "<event>": "createDroplet"},"'CstP'": {"<class>": "customPhosphors", "<key>": "customPalette"},"'Cstm'": {"<enumValue>": "customPattern", "<event>": "custom", "<key>": "custom"},"'Drkn'": {"<enumValue>": "darken", "<key>": "darkness"},"'Dstr'": {"<classKey>": {"'GEfc'": "distortion"},"<eventKey>": {"glass": "distortion", "addNoise": "distribution"},"<enumType>": "distribution","<enumValue>": "distort","<event>": "distribute"},"'Dstt'": {"<enumValue>": "desaturate", "<event>": "desaturate", "<key>": "destWhiteMax"},"'FlIn'": {"<typeValue>": {"fillColor": "fillInverse", "menuItemType": "fileInfo"},"<class>": "fileInfo","<key>": "fileInfo"},"'Gd  '": {"<class>": "guide", "<enumValue>": "good"},"'GnrP'": {"<class>": "preferencesClass", "<enumValue>": "generalPreferences", "<key>": "generalPrefs"},"'GrSt'": {"<class>": "graySetup", "<enumValue>": "grainStippled", "<key>": "graySetup"},"'Grdn'": {"<class>": "gradientClassEvent", "<event>": "gradientClassEvent", "<key>": "gridMinor"},"'Grn '": {"<typeValue>": {"'GEft'": "grain"},"<classKey>": {"'GEfc'": "grain","RGBColor": "green","blackAndWhite": "green","channelMatrix": "green","channelMixer": "green"},"<eventKey>": {"blackAndWhite": "green", "channelMixer": "green", "filmGrain": "grain"},"<enumValue>": "green","<event>": "grain"},"'Grns'": {"<enumValue>": "greens", "<key>": "graininess"},"'HstP'": {"<enumValue>": "historyPreferences", "<key>": "historyPrefs"},"'HstS'": {"<class>": "historyState", "<enumType>": "historyStateSourceType"},"'ImgP'": {"<class>": "imagePoint", "<enumValue>": "imageCachePreferences"},"'In  '": {"<enumValue>": "stampIn", "<key>": "in"},"'IntW'": {"<event>": "intersectWith", "<key>": "interfaceWhite"},"'Intr'": {"<typeValue>": {"shapeOperation": "intersect"},"<classKey>": {"GIFFormat": "interlace","SaveForWeb": "interlace","application": "interfaceIconFrameDimmed","computedBrush": "interpolation","gradientClassEvent": "interpolation","photoshopEPSFormat": "interpolation"},"<eventKey>": {"convertMode": "interpolation","imageSize": "interpolation","transform": "interpolation"},"<event>": "intersect"},"'JPEG'": {"<class>": "JPEGFormat", "<enumValue>": "JPEG"},"'LghD'": {"<enumType>": "lightDirection", "<enumValue>": "lightDirectional", "<key>": "lightDirection"},"'LghO'": {"<typeValue>": {"diffuseMode": "lightenOnly", "lightType": "lightOmni"}},"'LghS'": {"<class>": "lightSource", "<enumValue>": "lightSpot", "<key>": "lightSource"},"'Lns '": {"<enumType>": "lens", "<enumValue>": "lines", "<key>": "lens"},"'Mgnt'": {"<typeValue>": {"channel": "magenta", "colors": "magentas", "guideGridColor": "magenta"},"<key>": "magenta"},"'MrgL'": {"<enumValue>": "mergedLayers", "<event>": "mergeLayers"},"'Mxm '": {"<enumValue>": "maximumQuality", "<event>": "maximum", "<key>": "maximum"},"'NTSC'": {"<enumValue>": "NTSC", "<event>": "NTSCColors"},"'NmbL'": {"<classKey>": {"'GEfc'": "numberOfLevels", "document": "numberOfLayers"},"<eventKey>": {"cutout": "numberOfLevels"}},"'PlgP'": {"<class>": "pluginPrefs", "<enumValue>": "pluginPicker", "<key>": "pluginPrefs"},"'Pncl'": {"<enumValue>": "pencilEraser", "<key>": "pencilWidth"},"'Pnt '": {"<typeValue>": {"textType": "point"}, "<class>": "point", "<event>": "paint"},"'Prsp'": {"<enumValue>": "perspective", "<key>": "perspectiveIndex"},"'PrvM'": {"<enumValue>": "previewMagenta", "<key>": "previewMacThumbnail"},"'Pstr'": {"<class>": "posterize", "<event>": "posterize", "<key>": "posterization"},"'RGBS'": {"<enumType>": "RGBSetupSource", "<key>": "RGBSetup"},"'Rds '": {"<enumValue>": "reds", "<key>": "radius"},"'ScrD'": {"<enumValue>": "screenDot", "<key>": "scratchDisks"},"'ShdI'": {"<classKey>": {"'GEfc'": "shadowIntensity"},"<eventKey>": {"watercolor": "shadowIntensity"},"<unknown>": "shadingIntensity"},"'ShpC'": {"<classKey>": {"application": "shapingCurve"},"<class>": "shapingCurve","<key>": "shapeCurveType"},"'ShrE'": {"<event>": "sharpenEdges", "<key>": "shearEd"},"'Shrp'": {"<event>": "sharpen", "<key>": "sharpness"},"'SplC'": {"<event>": "splitChannels", "<key>": "supplementalCategories"},"'Spot'": {"<enumValue>": "spotColor", "<key>": "spot"},"'SprS'": {"<typeValue>": {"'GEft'": "sprayedStrokes"},"<enumValue>": "separationSetup","<event>": "sprayedStrokes"},"'StrL'": {"<enumType>": "strokeLocation", "<key>": "strokeLength"},"'Strt'": {"<classKey>": {"currentToolOptions": "saturation","fileNamingRules": "start","HSBColorClass": "saturation","hueSatAdjustment": "saturation","hueSatAdjustmentV2": "saturation","lineClass": "start","range": "start","vibrance": "saturation"},"<eventKey>": {"replaceColor": "saturation", "variations": "saturation", "vibrance": "saturation"},"<enumValue>": "saturation"},"'TEXT'": {"<enumType>": "textType", "<key>": "textType"},"'TIFF'": {"<class>": "TIFFFormat", "<enumValue>": "TIFF"},"'TglO'": {"<enumValue>": "toggleOptionsPalette", "<key>": "toggleOthers"},"'TrnG'": {"<classKey>": {"application": "transparencyGrid", "transparencyPrefs": "transparencyGridSize"},"<enumType>": "transparencyGridSize","<enumValue>": "transparencyGamutPreferences"},"'TrnS'": {"<classKey>": {"bevelEmboss": "transparencyShape","dropShadow": "transparencyShape","innerGlow": "transparencyShape","innerShadow": "transparencyShape","outerGlow": "transparencyShape"}, "<class>": "transparencyStop", "<unknown>": "transferSpec"},"'Trns'": {"<enumValue>": "transparent", "<key>": "transparency"},"'TxtC'": {"<classKey>": {"'GEfc'": "textureCoverage", "textLayer": "textClickPoint"},"<eventKey>": {"underpainting": "textureCoverage"}},"'TxtF'": {"<event>": "textureFill", "<key>": "textureFile"},"'UsrM'": {"<enumType>": "userMaskOptions", "<key>": "userMaskEnabled"},"'null'": {"<class>": "null", "<enumValue>": "null", "<event>": "null", "<key>": "target"}};function getFromId(context, parentContext) {var uniIdStr;var kind = context[0];var id = context[1];if (id < smallestHashValue) {uniIdStr = app.typeIDToStringID(id);} else {uniIdStr = "'" + app.typeIDToCharID(id) + "'";if (that.meaningfulIds) {if (uniIdStr in contextRules) {function resolveIdStr(candidates) {var idStr = "";for (var parentString in candidates) {if (candidates.hasOwnProperty(parentString)) {if (parentContext[1] === that.uniIdStrToId(parentString)) {idStr = candidates[parentString];break;}}}return idStr;}var resolvedIdStr = "";var rule = contextRules[uniIdStr];if (parentContext) {switch (kind) {case"<key>":if ((parentContext[0] === "<class>") && ("<classKey>" in rule)) {resolvedIdStr = resolveIdStr(rule["<classKey>"]);} else if ((parentContext[0] === "<event>") && ("<eventKey>" in rule)) {resolvedIdStr = resolveIdStr(rule["<eventKey>"]);}break;case"<enumValue>":if ((parentContext[0] === "<enumType>") && ("<typeValue>" in rule)) {resolvedIdStr = resolveIdStr(rule["<typeValue>"]);}break;}}if (resolvedIdStr !== "") {uniIdStr = resolvedIdStr;} else if (kind in rule) {uniIdStr = rule[kind];}} else {var stringIDStr = app.typeIDToStringID(id);if (stringIDStr !== "") {uniIdStr = stringIDStr;}}}}return uniIdStr;}var incompatiblePlatformPath = "";var getEventId = app.stringIDToTypeID("get");var targetKeyId = app.stringIDToTypeID("target");var propertyClassId = app.stringIDToTypeID("property");function getFromReference(ref) {var propertyId = 0;var arr = [];do {try {var desiredClassId = ref.getDesiredClass();} catch (e) {break;}if (propertyId !== 0) {var propertyCompact = that.buildCompact("<property>", getFromId(["<key>", propertyId], ["<class>", desiredClassId]));arr.push(that.buildCompact(getFromId(["<class>", propertyClassId]), propertyCompact));propertyId = 0;}var desiredCompact;var aFormID = ref.getForm();switch (aFormID) {case ReferenceFormType.CLASSTYPE:desiredCompact = that.buildCompact("<class>", null);break;case ReferenceFormType.ENUMERATED:var enumTypeContext = ["<enumType>", ref.getEnumeratedType()];var enumValueContext = ["<enumValue>", ref.getEnumeratedValue()];desiredCompact = that.buildCompact("<enumerated>", that.buildCompact(getFromId(enumTypeContext), getFromId(enumValueContext, enumTypeContext)));break;case ReferenceFormType.IDENTIFIER:desiredCompact = that.buildCompact("<identifier>", ref.getIdentifier());break;case ReferenceFormType.INDEX:desiredCompact = that.buildCompact("<index>", ref.getIndex());break;case ReferenceFormType.NAME:desiredCompact = that.buildCompact("<name>", ref.getName());break;case ReferenceFormType.OFFSET:desiredCompact = that.buildCompact("<offset>", ref.getOffset());break;case ReferenceFormType.PROPERTY:if (desiredClassId === propertyClassId) {propertyId = ref.getProperty();} else {desiredCompact = that.buildCompact("<property>", getFromId(["<key>", ref.getProperty()], ["<class>", desiredClassId]));}break;default:throw new Error("[jamEngine getFromReference] Unknown reference form type: " + aFormID);break;}if (desiredClassId !== propertyClassId) {arr.push(that.buildCompact(getFromId(["<class>", desiredClassId]), desiredCompact));}ref = ref.getContainer();} while (ref);return arr;}function getFromList(list) {var arr = [];var itemCount = list.count;for (var itemIndex = 0; itemIndex < itemCount; itemIndex++) {var itemCompact;var typeID;try {typeID = list.getType(itemIndex);} catch (e) {continue;}switch (typeID) {case DescValueType.BOOLEANTYPE:itemCompact = that.buildCompact("<boolean>", list.getBoolean(itemIndex));break;case DescValueType.CLASSTYPE:itemCompact = that.buildCompact("<class>", getFromId(["<class>", list.getClass(itemIndex)]));break;case DescValueType.DOUBLETYPE:itemCompact = that.buildCompact("<double>", list.getDouble(itemIndex));break;case DescValueType.ENUMERATEDTYPE:var enumTypeContext = ["<enumType>", list.getEnumerationType(itemIndex)];var enumValueContext = ["<enumValue>", list.getEnumerationValue(itemIndex)];itemCompact = that.buildCompact("<enumerated>", that.buildCompact(getFromId(enumTypeContext), getFromId(enumValueContext, enumTypeContext)));break;case DescValueType.INTEGERTYPE:itemCompact = that.buildCompact("<integer>", list.getInteger(itemIndex));break;case DescValueType.LISTTYPE:itemCompact = that.buildCompact("<list>", getFromList(list.getList(itemIndex)));break;case DescValueType.OBJECTTYPE:var objectTypeContext = ["<class>", list.getObjectType(itemIndex)];var objectValue = list.getObjectValue(itemIndex);itemCompact = that.buildCompact("<object>", that.buildCompact(getFromId(objectTypeContext), getFromDescriptor(objectValue, objectTypeContext)));break;case DescValueType.ALIASTYPE:try {var fileRef = list.getPath(itemIndex);itemCompact = that.buildCompact("<path>", fileRef.fsName);} catch (e) {itemCompact = that.buildCompact("<path>", incompatiblePlatformPath);}break;case DescValueType.REFERENCETYPE:itemCompact = that.buildCompact("<reference>", getFromReference(list.getReference(itemIndex)));break;case DescValueType.STRINGTYPE:itemCompact = that.buildCompact("<string>", list.getString(itemIndex));break;case DescValueType.UNITDOUBLE:var unitTypeContext = ["<unit>", list.getUnitDoubleType(itemIndex)];var doubleValue = list.getUnitDoubleValue(itemIndex);itemCompact = that.buildCompact("<unitDouble>", that.buildCompact(getFromId(unitTypeContext), doubleValue));break;default:var isRawType;var isLargeIntegerType;try {isRawType = (typeID === DescValueType.RAWTYPE);} catch (e) {}try {isLargeIntegerType = (typeID === DescValueType.LARGEINTEGERTYPE);} catch (e) {}if (isRawType) {itemCompact = that.buildCompact("<data>", list.getData(itemIndex));} else if (isLargeIntegerType) {itemCompact = that.buildCompact("<largeInteger>", list.getLargeInteger(itemIndex));} else {throw new Error("[jamEngine getFromList] Unknown descriptor value type: " + typeID);}break;}arr[itemIndex] = itemCompact;}return arr;}function getFromDescriptor(desc, parentContext) {if (desc) {var obj = {};var keyCount;try {keyCount = desc.count;} catch (e) {return null;}for (var keyIndex = 0; keyIndex < keyCount; keyIndex++) {var keyID = desc.getKey(keyIndex);var keyString = getFromId(["<key>", keyID], parentContext);var keyCompact;var typeID;try {typeID = desc.getType(keyID);} catch (e) {continue;}switch (typeID) {case DescValueType.BOOLEANTYPE:keyCompact = that.buildCompact("<boolean>", desc.getBoolean(keyID));break;case DescValueType.CLASSTYPE:keyCompact = that.buildCompact("<class>", getFromId(["<class>", desc.getClass(keyID)]));break;case DescValueType.DOUBLETYPE:keyCompact = that.buildCompact("<double>", desc.getDouble(keyID));break;case DescValueType.ENUMERATEDTYPE:var enumTypeContext = ["<enumType>", desc.getEnumerationType(keyID)];var enumValueContext = ["<enumValue>", desc.getEnumerationValue(keyID)];keyCompact = that.buildCompact("<enumerated>", that.buildCompact(getFromId(enumTypeContext), getFromId(enumValueContext, enumTypeContext)));break;case DescValueType.INTEGERTYPE:keyCompact = that.buildCompact("<integer>", desc.getInteger(keyID));break;case DescValueType.LISTTYPE:keyCompact = that.buildCompact("<list>", getFromList(desc.getList(keyID)));break;case DescValueType.OBJECTTYPE:var objectTypeContext = ["<class>", desc.getObjectType(keyID)];var objectValue = desc.getObjectValue(keyID);keyCompact = that.buildCompact("<object>", that.buildCompact(getFromId(objectTypeContext), getFromDescriptor(objectValue, objectTypeContext)));break;case DescValueType.ALIASTYPE:try {var fileRef = desc.getPath(keyID);keyCompact = that.buildCompact("<path>", fileRef.fsName);} catch (e) {keyCompact = that.buildCompact("<path>", incompatiblePlatformPath);}break;case DescValueType.REFERENCETYPE:keyCompact = that.buildCompact("<reference>", getFromReference(desc.getReference(keyID)));break;case DescValueType.STRINGTYPE:keyCompact = that.buildCompact("<string>", desc.getString(keyID));break;case DescValueType.UNITDOUBLE:var unitTypeContext = ["<unit>", desc.getUnitDoubleType(keyID)];var doubleValue = desc.getUnitDoubleValue(keyID);keyCompact = that.buildCompact("<unitDouble>", that.buildCompact(getFromId(unitTypeContext), doubleValue));break;default:var isRawType;var isLargeIntegerType;try {isRawType = (typeID === DescValueType.RAWTYPE);} catch (e) {}try {isLargeIntegerType = (typeID === DescValueType.LARGEINTEGERTYPE);} catch (e) {}if (isRawType) {keyCompact = that.buildCompact("<data>", desc.getData(keyID));} else if (isLargeIntegerType) {keyCompact = that.buildCompact("<largeInteger>", desc.getLargeInteger(keyID));} else {throw new Error("[jamEngine getFromDescriptor] Unknown descriptor value type: " + typeID);}break;}obj[keyString] = keyCompact;}return obj;} else {return null;}}jamEngine.jsonToActionDescriptor = function (descriptorObj) {that = this;var actionDescriptor;if (descriptorObj) {actionDescriptor = new ActionDescriptor();putInDescriptor(actionDescriptor, descriptorObj);}return actionDescriptor;};jamEngine.jsonToActionReference = function (referenceArr) {that = this;var actionReference;if (referenceArr) {actionReference = new ActionReference();putInReference(actionReference, referenceArr);}return actionReference;};jamEngine.eventIdAndActionDescriptorToJson = function (eventId, actionDescriptor) {that = this;var eventIdContext = ["<event>", eventId];return {"<event>": getFromId(eventIdContext),"<descriptor>": getFromDescriptor(actionDescriptor, eventIdContext)};};jamEngine.classIdAndActionDescriptorToJson = function (classId, actionDescriptor) {that = this;var classIdContext = ["<class>", classId];return {"<class>": getFromId(classIdContext),"<descriptor>": getFromDescriptor(actionDescriptor, classIdContext)};};jamEngine.actionReferenceToJson = function (actionReference) {that = this;return getFromReference(actionReference);};function getReferenceClassId(ref) {classId = 0;do {try {var desiredClassId = ref.getDesiredClass();} catch (e) {break;}if (desiredClassId !== propertyClassId) {classId = desiredClassId;break;}ref = ref.getContainer();} while (ref);return classId;}jamEngine.jsonPlay = function (eventUniIdStr, descriptorObj, displayDialogs) {var eventId = this.uniIdStrToId(eventUniIdStr);var desc = this.jsonToActionDescriptor(descriptorObj);var parentContext;if (eventId === getEventId) {var ref = desc.getReference(targetKeyId);parentContext = ["<class>", getReferenceClassId(ref)];} else {parentContext = ["<event>", eventId];}return getFromDescriptor(app.executeAction(eventId, desc, displayDialogs), parentContext);};jamEngine.jsonGet = function (referenceArr) {var ref = this.jsonToActionReference(referenceArr);return getFromDescriptor(app.executeActionGet(ref), ["<class>", getReferenceClassId(ref)]);};jamEngine.normalizeJsonItem = function (item, options) {function normalizeItem(item) {var explicit = that.parseCompact(item);var type = explicit[0];var value = explicit[1];var normalizedValue;switch (type) {case"<boolean>":case"<data>":case"<double>":case"<identifier>":case"<index>":case"<integer>":case"<largeInteger>":case"<name>":case"<offset>":case"<path>":case"<string>":normalizedValue = value;break;case"<class>":normalizedValue = value && getFromId(["<class>", that.uniIdStrToId(value)]);break;case"<enumerated>":var enumerated = that.parseCompact(value);var enumTypeContext = ["<enumType>", that.uniIdStrToId(enumerated[0])];var enumValueContext = ["<enumValue>", that.uniIdStrToId(enumerated[1])];normalizedValue = that.buildCompact(getFromId(enumTypeContext), getFromId(enumValueContext, enumTypeContext));break;case"<list>":normalizedValue = [];for (var i = 0; i < value.length; i++) {normalizedValue.push(normalizeItem(value[i]));}break;case"<object>":var object = that.parseCompact(value);var objectClassContext = ["<class>", that.uniIdStrToId(object[0])];var objectDescriptor = object[1];var normalizedDescriptor;if (objectDescriptor === null) {normalizedDescriptor = null;} else {normalizedDescriptor = {};for (var key in objectDescriptor) {if (objectDescriptor.hasOwnProperty(key)) {var objectKeyContext = ["<key>", that.uniIdStrToId(key)];normalizedDescriptor[getFromId(objectKeyContext, objectClassContext)] = normalizeItem(objectDescriptor[key]);}}}normalizedValue = that.buildCompact(getFromId(objectClassContext), normalizedDescriptor);break;case"<property>":normalizedValue = getFromId(["<key>", that.uniIdStrToId(value)]);break;case"<reference>":normalizedValue = [];for (var i = 0; i < value.length; i++) {var container = that.parseCompact(value[i]);normalizedValue.push(that.buildCompact(getFromId(["<class>", that.uniIdStrToId(container[0])]), normalizeItem(container[1])));}break;case"<unitDouble>":var unitDouble = that.parseCompact(value);var unitTypeContext = ["<unit>", that.uniIdStrToId(unitDouble[0])];normalizedValue = that.buildCompact(getFromId(unitTypeContext), unitDouble[1]);break;default:throw new Error("[jamEngine.normalizeJsonItem] Unknown item type: " + type);break;}return that.buildCompact(type, normalizedValue);}that = this;var saveMeaningfulIds = this.meaningfulIds;var saveParseFriendly = this.parseFriendly;if (options && (options.constructor === Object)) {if (typeof options.meaningfulIds !== 'undefined') {this.meaningfulIds = options.meaningfulIds;}if (typeof options.parseFriendly !== 'undefined') {this.parseFriendly = options.parseFriendly;}}var normalizedItem = normalizeItem(item);this.meaningfulIds = saveMeaningfulIds;this.parseFriendly = saveParseFriendly;return normalizedItem;};function simplifyRef(ref) {var simplifiedRef = [];for (var i = 0; i < ref.length; i++) {var element = ref[i];var simplifiedElement = {};var desiredClass = element[0];var form = element[1][0];var value = element[1][1];switch (form) {case"<class>":case"<identifier>":case"<index>":case"<name>":case"<offset>":case"<property":simplifiedElement[desiredClass] = value;break;case"<enumerated>":simplifiedElement[desiredClass] = value[1];break;default:throw new Error("[jamEngine simplifyRef] Unexpected element form: " + form);break;}simplifiedRef.push(simplifiedElement);}return simplifiedRef;}function simplifyItem(item, hook) {var simplifiedItem;var type = item[0];var value = item[1];switch (type) {case"<boolean>":case"<class>":case"<data>":case"<double>":case"<integer>":case"<largeInteger>":case"<path>":case"<string>":simplifiedItem = value;break;case"<list>":simplifiedItem = simplifyList(value, hook);break;case"<enumerated>":case"<unitDouble>":simplifiedItem = value[1];break;case"<object>":simplifiedItem = simplifyDesc(value[1], hook);break;case"<reference>":simplifiedItem = simplifyRef(value);break;default:throw new Error("[jamEngine simplifyItem] Unexpected item type: " + type);break;}return simplifiedItem;}function simplifyList(list, hook) {var simplifiedList = [];for (var i = 0; i < list.length; i++) {simplifiedList.push(simplifyItem(list[i], hook));}return simplifiedList;}function simplifyDesc(desc, hook) {var getDefaultValue = function (desc, key) {return simplifyItem(desc[key], hook);};var simplifiedDesc = {};for (var key in desc) {if (desc.hasOwnProperty(key)) {var value = undefined;if (typeof hook === 'function') {value = hook(desc, key, getDefaultValue);}if (typeof value === 'undefined') {value = simplifyItem(desc[key], hook);}simplifiedDesc[key] = value;}}return simplifiedDesc;}jamEngine.simplifyObject = function (object, hookFunction) {return simplifyDesc((this.normalizeJsonItem(object, {meaningfulIds: true,parseFriendly: true}))[1][1], hookFunction);};jamEngine.simplifyList = function (list, hookFunction) {return simplifyList((this.normalizeJsonItem(list, {meaningfulIds: true,parseFriendly: true}))[1], hookFunction);};jamEngine.parseCompact = function (compact) {var result = [];if (compact.constructor === Object) {var keys = [];for (var k in compact) {if (compact.hasOwnProperty(k)) {keys.push(k);}}if (keys.length === 1) {result[0] = keys[0];result[1] = compact[keys[0]];} else {throw new Error("[jamEngine.parseCompact] Syntax error: " + compact.toSource());}} else if (compact.constructor === Array) {if (compact.length === 2) {result[0] = compact[0];result[1] = compact[1];} else {throw new Error("[jamEngine.parseCompact] Syntax error: " + compact.toSource());}} else {throw new Error("[jamEngine.parseCompact] JavaScript object or array expected");}return result;};jamEngine.compactToExplicit = function (compact, typeKey, valueKey) {var explicit = {};var typeValue = this.parseCompact(compact);explicit[typeKey || "<type>"] = typeValue[0];explicit[valueKey || "<value>"] = typeValue[1];return explicit;};jamEngine.buildCompact = function (type, value) {var compact;if (typeof type === 'string') {if (this.parseFriendly) {compact = [type, value];} else {compact = {};compact[type] = value;}} else {throw new Error("[jamEngine.buildCompact] String expected");}return compact;};jamEngine.explicitToCompact = function (explicit, typeKey, valueKey) {var compact;if (explicit.constructor === Object) {compact = this.buildCompact(explicit[typeKey || "<type>"], explicit[valueKey || "<value>"]);} else {throw new Error("[jamEngine.explicitToCompact] JavaScript object expected");}return compact;};for (var charIdStr in conflictingStringIdStrs) {if (conflictingStringIdStrs.hasOwnProperty(charIdStr)) {var stringIdStrs = conflictingStringIdStrs[charIdStr];for (var index = stringIdStrs.length - 1; index >= 0; index--) {var stringIdStr = stringIdStrs[index];if (!(app.charIDToTypeID(charIdStr.substring(1, 5)) === app.stringIDToTypeID(stringIdStr))) {stringIdStrs.splice(index, 1);}}if (stringIdStrs.length < 2) {delete conflictingStringIdStrs[charIdStr];}}}for (var charIdStr in contextRules) {if (contextRules.hasOwnProperty(charIdStr)) {if (charIdStr in conflictingStringIdStrs) {var rule = contextRules[charIdStr];for (var kind in rule) {if (rule.hasOwnProperty(kind)) {switch (kind) {case"<class>":case"<event>":case"<enumType>":case"<enumValue>":case"<key>":case"<unknown>":if (app.charIDToTypeID(charIdStr.substring(1, 5)) != app.stringIDToTypeID(rule[kind])) {throw new Error("[jamEngine] " + "\"" + charIdStr + "\" and \"" + rule[kind] + "\" are not equivalent ID strings");}break;case"<classKey>":case"<eventKey>":case"<typeValue>":for (var parent in rule[kind]) {if (rule[kind].hasOwnProperty(parent)) {if (app.charIDToTypeID(charIdStr.substring(1, 5)) != app.stringIDToTypeID(rule[kind][parent])) {throw new Error("[jamEngine] " + "\"" + charIdStr + "\" and \"" + rule[kind][parent] + "\" are not equivalent ID strings");}}}break;}}}} else {delete contextRules[charIdStr];}}}}());
}jamEngine.meaningfulIds = true;
jamEngine.parseFriendly = true;// Action “Create Dark LMs”
try {// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<reference>",[["channel",["<enumerated>",["channel","RGB"]]]]]},DialogModes.NO);}// Inverseif (true) {jamEngine.jsonPlay("inverse",null,DialogModes.NO);}// Duplicateif (true) {jamEngine.jsonPlay("duplicate",{"target":["<reference>",[["channel",["<property>","selection"]]]],"name":["<string>","Darks 1"]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<name>","Darks 1"]]]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<enumerated>",["ordinal","none"]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]]},DialogModes.NO);}// Intersectif (true) {jamEngine.jsonPlay("intersect",{"target":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]],"with":["<reference>",[["channel",["<property>","selection"]]]]},DialogModes.NO);}// Duplicateif (true) {jamEngine.jsonPlay("duplicate",{"target":["<reference>",[["channel",["<property>","selection"]]]],"name":["<string>","Darks 2"]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<name>","Darks 2"]]]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<enumerated>",["ordinal","none"]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]]},DialogModes.NO);}// Intersectif (true) {jamEngine.jsonPlay("intersect",{"target":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]],"with":["<reference>",[["channel",["<property>","selection"]]]]},DialogModes.NO);}// Duplicateif (true) {jamEngine.jsonPlay("duplicate",{"target":["<reference>",[["channel",["<property>","selection"]]]],"name":["<string>","Darks 3"]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<name>","Darks 3"]]]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<enumerated>",["ordinal","none"]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]]},DialogModes.NO);}// Intersectif (true) {jamEngine.jsonPlay("intersect",{"target":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]],"with":["<reference>",[["channel",["<property>","selection"]]]]},DialogModes.NO);}// Duplicateif (true) {jamEngine.jsonPlay("duplicate",{"target":["<reference>",[["channel",["<property>","selection"]]]],"name":["<string>","Darks 4"]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<name>","Darks 4"]]]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<enumerated>",["ordinal","none"]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]]},DialogModes.NO);}// Intersectif (true) {jamEngine.jsonPlay("intersect",{"target":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]],"with":["<reference>",[["channel",["<property>","selection"]]]]},DialogModes.NO);}// Duplicateif (true) {jamEngine.jsonPlay("duplicate",{"target":["<reference>",[["channel",["<property>","selection"]]]],"name":["<string>","Darks 5"]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<name>","Darks 5"]]]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<enumerated>",["ordinal","none"]]},DialogModes.NO);}// Setif (true) {jamEngine.jsonPlay("set",{"target":["<reference>",[["channel",["<property>","selection"]]]],"to":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]]},DialogModes.NO);}// Intersectif (true) {jamEngine.jsonPlay("intersect",{"target":["<reference>",[["channel",["<enumerated>",["ordinal","targetEnum"]]]]],"with":["<reference>",[["channel",["<property>","selection"]]]]},DialogModes.NO);}// Duplicateif (true) {jamEngine.jsonPlay("duplicate",{"target":["<reference>",[["channel",["<property>","selection"]]]],"name":["<string>","Darks 6"]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<name>","Darks 6"]]]]},DialogModes.NO);}// Selectif (true) {jamEngine.jsonPlay("select",{"target":["<reference>",[["channel",["<enumerated>",["channel","RGB"]]]]]},DialogModes.NO);}
}
catch (e) {if (e.number !== 8007)  // Not a user cancel error{try {jamEngine.jsonPlay("stop",{"message":["<string>",e.message.replace(/^.*\n- /, "")]},DialogModes.ALL);}catch (e) {}}
}

3.作者答疑


  代码长度过长,如需全部项目,请留言。

提示: 作者知了-联系方式1
提示: 作者知了-联系方式2

Photoshop插件--创建暗调通道--脚本开发--PS插件相关推荐

  1. Photoshop插件-色调-颜色/明度-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码 2.1 色调 2.2 颜色/明度 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本文演示如何通过脚 ...

  2. Photoshop插件-全部色彩校正-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码--全部色彩校正 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本文演示如何通过脚本实现全部色彩校正 ...

  3. Photoshop插件--证件照--1寸裁剪--1寸排版--脚本开发--PS插件

    文章目录 1.插件界面 2.关键代码 2.1.1寸裁剪 2.2.1寸排版   PS是一款栅格图像编辑软件,具有许多强大的功能,可以制作证件照,本文演示如何通过脚本实现1寸裁剪和1寸排版功能相关功能,展 ...

  4. Photoshop插件-保存-8位通道-16位通道-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码 2.1.8位通道 2.2.16位通道 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,具有许多强大的功能,本文演示如何通过脚本实现8位通道和16位通 ...

  5. Photoshop插件-锐化-多重调整锐化 (Web)-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本文演示如何通过脚本实现多重调整锐化 (Web)相关 ...

  6. Photoshop插件-秋色效果-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码-秋色效果 3.作者答疑   PS是一款栅格图像编辑软件,具有许多强大的功能,本文演示如何通过脚本实现秋色效果相关功能,展示从互联网收集而来的一个小插件,供大家学习 ...

  7. Photoshop插件-色彩混合模式-盖印-删除-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码 2.1 色彩混合模式 2.2 盖印 2.3 删除 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本 ...

  8. Photoshop插件-锐化-高反差保留-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本文演示如何通过脚本实现高反差保留相关功能,展示从互 ...

  9. Photoshop插件-锐化-高反差保留仅边缘-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本文演示如何通过脚本实现高反差保留仅边缘相关功能,展 ...

  10. Photoshop插件-修复高光-脚本开发-PS插件

    文章目录 1.插件界面 2.关键代码-修复高光 3.代码转执行 4.作者答疑   PS是一款栅格图像编辑软件,模块众多.提供了脚本,动态连接库等多种扩展机制,本文演示如何通过脚本实现修复高光相关功能, ...

最新文章

  1. 深入理解javascript原型和闭包(16)——完结
  2. Confluence 6 针对 'unmigrated-wiki-markup' 宏重新尝试合并
  3. openssh升级sftp_Centos7 升级 openSSH 到7.9p1的详细步骤
  4. 剧本翻译之SHUFFLE 6月24日
  5. FreeRTOS互斥锁
  6. 架构设计:服务自动化部署和管理流程
  7. FineUI之使用SQL脚本从数据库表中生成对应的输入控件
  8. 【蓝牙学习笔记】Arduino设置蓝牙模块HC-06 CC2540 CC2541自动初始化
  9. 如何制作图书专用标签
  10. DHT分布式哈希表通俗讲解
  11. 手机上最好用的五笔输入法_最欠揍的手机输入法,用不好失业又失恋
  12. 六类双绞线排序和信息插座排序
  13. AI绘图之基于文本/图片制图
  14. 适合新手的网站建设方案
  15. 微信公众号二维码怎么生成?好用的生成方法介绍
  16. 刘强东深夜发文:京东物流去年亏损超过28亿,再亏融资只够撑两年
  17. 没有目标的人叫流浪,有目标的人叫航行
  18. python,根据tkinter计数器案例,写了个倒计时器
  19. Spring自动装配解析
  20. 网络推广团队每天都在干什么?

热门文章

  1. Qt播放多路视频的理解
  2. AdapterView 及其子类
  3. 耳机及音响--煲机软件
  4. VSS 2005 安装,配置简明手册 及VSS2005下载地址
  5. 唯有读书,能战胜这个爆炸的时代
  6. 汽车工程大专业细分学科类别小探
  7. kindeditor上传图片php,kindeditor上传图片与上传文件js
  8. 【接口测试】Jmeter+ant安装及简单使用教程(集成)
  9. Python自动登录QQ的实现示例
  10. Failed to load registry 错误