PS是一款栅格图像编辑软件,具有许多强大的功能,本文演示如何通过脚本实现转换sRGB相关功能,展示从互联网收集而来的一个小插件,供大家学习交流,请勿用于商业用途。
1.插件界面
本文界面是一系列功能的一部分,将逐步展示,但是功能界面是共同的,如下图所示:
2.关键代码
大家可通过源代码阅读,来掌握相关技巧,源代码如下:
if (app) { try { Select(); } catch (e) { }}function Select() { if (ScriptUI.environment.keyboardState.shiftKey) { function Convert2() { function step1(enabled, withDialog) { if (enabled != undefined && !enabled) { return; } var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO; var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putEnumerated(PSClass.Document, PSType.Ordinal, PSEnum.Target); desc1.putReference(PSString.Null, ref1); desc1.putString(PSKey.To, "sRGB IEC61966-2.1"); desc1.putEnumerated(PSKey.Intent, PSKey.Intent, PSEnum.Image); desc1.putBoolean(PSKey.MapBlack, true); desc1.putBoolean(PSString.rasterizePlaced, false); desc1.putInteger(PSKey.ShadowMode, 2); executeAction(sTID("convertToProfile"), desc1, dialogMode); } step1(true, true); } cTID = function(s) { return app.charIDToTypeID(s); }; sTID = function(s) { return app.stringIDToTypeID(s); }; Convert2.loadSymbols = function() { var dbgLevel = $.level; $.level = 0; try { PSConstants; return; } catch (e) { } finally { $.level = dbgLevel; } var needDefs = true; $.level = 0; try { PSClass; needDefs = false; } catch (e) { } finally { $.level = dbgLevel; } if (needDefs) { PSClass = function() { }; PSEnum = function() { }; PSEvent = function() { }; PSForm = function() { }; PSKey = function() { }; PSType = function() { }; PSUnit = function() { }; PSString = function() { }; } PSClass.Document = cTID("Dcmn"); PSEnum.Image = cTID("Img "); PSEnum.Target = cTID("Trgt"); PSKey.Intent = cTID("Inte"); PSKey.MapBlack = cTID("MpBl"); PSKey.ShadowMode = cTID("sdwM"); PSKey.To = cTID("T "); PSString.Null = sTID("null"); PSString.rasterizePlaced = sTID("rasterizePlaced"); PSType.Ordinal = cTID("Ordn"); }; Convert2.loadSymbols(); Convert2.main = function() { Convert2(); }; Convert2.main(); } else { function Convert1() { function step1(enabled, withDialog) { if (enabled != undefined && !enabled) { return; } var dialogMode = withDialog ? DialogModes.ALL : DialogModes.NO; var desc1 = new ActionDescriptor(); var ref1 = new ActionReference(); ref1.putEnumerated(PSClass.Document, PSType.Ordinal, PSEnum.Target); desc1.putReference(PSString.Null, ref1); desc1.putString(PSKey.To, "sRGB IEC61966-2.1"); desc1.putEnumerated(PSKey.Intent, PSKey.Intent, PSEnum.Image); desc1.putBoolean(PSKey.MapBlack, true); desc1.putBoolean(PSString.rasterizePlaced, false); desc1.putInteger(PSKey.ShadowMode, 2); executeAction(sTID("convertToProfile"), desc1, dialogMode); } step1(); } cTID = function(s) { return app.charIDToTypeID(s); }; sTID = function(s) { return app.stringIDToTypeID(s); }; Convert1.loadSymbols = function() { var dbgLevel = $.level; $.level = 0; try { PSConstants; return; } catch (e) { } finally { $.level = dbgLevel; } var needDefs = true; $.level = 0; try { PSClass; needDefs = false; } catch (e) { } finally { $.level = dbgLevel; } if (needDefs) { PSClass = function() { }; PSEnum = function() { }; PSEvent = function() { }; PSForm = function() { }; PSKey = function() { }; PSType = function() { }; PSUnit = function() { }; PSString = function() { }; } PSClass.Document = cTID("Dcmn"); PSEnum.Image = cTID("Img "); PSEnum.Target = cTID("Trgt"); PSKey.Intent = cTID("Inte"); PSKey.MapBlack = cTID("MpBl"); PSKey.ShadowMode = cTID("sdwM"); PSKey.To = cTID("T "); PSString.Null = sTID("null"); PSString.rasterizePlaced = sTID("rasterizePlaced"); PSType.Ordinal = cTID("Ordn"); }; Convert1.loadSymbols(); Convert1.main = function() { Convert1(); }; Convert1.main(); }}
3.代码转执行
使用记事本或者notepad++等文本编辑器,将代码拷贝至文本文件,然后修改后缀名为js或者jsx,最后再PS软件菜单文件》脚本》浏览,点执行即可,也可以将脚本放在预设文件夹内,会显示再脚本下的二级子菜单。如下图所示:
PS脚本执行.png
4.作者答疑
合理的脚本代码可以有效地提高工作效率,减少重复劳动。
文章引用至 作者联系方式
文章引用至 插件开发流程 - 知乎
版权声明:内容来源于互联网和用户投稿 如有侵权请联系删除