【发布时间】:2022-11-11 22:17:21
【问题描述】:
我正在编写一个应该更新自身的脚本,但我被卡住了。
基本上我必须替换一个包含 RGB 颜色数组的变量(该值在此脚本期间更改)并覆盖 .jsx 文件中的此变量。
为了清楚起见,我举一个例子:
var RGBColor = [0, 0, 0]; //Black RGB color
var RGBColor2 = RGBColor;
// The script runs and change RGBColor2 value to [0.2, 0.55, 0.2]
var UpdateFile = function () {
var JSX = File ($.fileName);
JSX.open ("e");
JSX.write ((JSX.read ()).replace (RGBColor, RGBColor2));
JSX.close ();
}
UpdateFile ();
这是我理论上应该做的,但我不能以任何方式替换变量(我尝试了所有方法,即使使用方法“open(”r”)”,“read”,“close”,“open(”w “)“, “写”)。
有谁知道如何使这个脚本工作或知道如何编写它?
更新
最终脚本将是一个带有六个滑块的 scriptui 面板,三个用于第一种颜色(R、G、B),三个用于第二种颜色。
当按下“应用”按钮时,脚本将不得不替换脚本内的 rgb 变量。
在弄乱了食尸鬼傻瓜的代码后,我决定替换变量而不是数组,因为它看起来更困难。但是我不能覆盖变量。
这是代码:
var Red1 = 0;
var Green1 = 0;
var Blue1 = 0;
var Red2 = 1;
var Green2 = 1;
var Blue2 = 1;
var FirstColor = [Red1, Green1, Blue1];
var SecondColor = [Red2, Green2, Blue2];
var MainPanel = new Window ("dialog", "Pannello1");
var Text1 = MainPanel.add ("statictext");
Text1.text = "First color";
var RSlider1 = MainPanel.add ("slider");
RSlider1.minvalue = 0;
RSlider1.maxvalue = 255;
RSlider1.value = Math.round (FirstColor[0] * 255);
var RNumber1 = MainPanel.add ("statictext", undefined, RSlider1.value);
RNumber1.preferredSize.width = 25;
RNumber1.graphics.foregroundColor = RNumber1.graphics.newPen (RNumber1.graphics.PenType.SOLID_COLOR, [1, 0, 0], 1);
RNumber1.graphics.disabledForegroundColor = RNumber1.graphics.foregroundColor;
RNumber1.graphics.font = ScriptUI.newFont (RNumber1.graphics.font.name, "Bold", RNumber1.graphics.font.size);
var GSlider1 = MainPanel.add ("slider");
GSlider1.minvalue = 0;
GSlider1.maxvalue = 255;
GSlider1.value = Math.round (FirstColor[1] * 255);
var GNumber1 = MainPanel.add ("statictext", undefined, GSlider1.value);
GNumber1.preferredSize.width = 25;
GNumber1.graphics.foregroundColor = GNumber1.graphics.newPen (GNumber1.graphics.PenType.SOLID_COLOR, [0, 1, 0], 1);
GNumber1.graphics.disabledForegroundColor = GNumber1.graphics.foregroundColor;
GNumber1.graphics.font = ScriptUI.newFont (GNumber1.graphics.font.name, "Bold", GNumber1.graphics.font.size);
var BSlider1 = MainPanel.add ("slider");
BSlider1.minvalue = 0;
BSlider1.maxvalue = 255;
BSlider1.value = Math.round (FirstColor[2] * 255);
var BNumber1 = MainPanel.add ("statictext", undefined, BSlider1.value);
BNumber1.preferredSize.width = 25;
BNumber1.graphics.foregroundColor = BNumber1.graphics.newPen (BNumber1.graphics.PenType.SOLID_COLOR, [0, 0, 1], 1);
BNumber1.graphics.disabledForegroundColor = BNumber1.graphics.foregroundColor;
BNumber1.graphics.font = ScriptUI.newFont (BNumber1.graphics.font.name, "Bold", BNumber1.graphics.font.size);
RSlider1.onChanging = GSlider1.onChanging = BSlider1.onChanging = function () {
RNumber1.text = Math.round (RSlider1.value);
GNumber1.text = Math.round (GSlider1.value);
BNumber1.text = Math.round (BSlider1.value);
Red1 = Math.floor ((Math.round (RSlider1.value) / 255) * 100) / 100;
Green1 = Math.floor ((Math.round (GSlider1.value) / 255) * 100) / 100;
Blue1 = Math.floor ((Math.round (BSlider1.value) / 255) * 100) / 100;
}
var Text2 = MainPanel.add ("statictext");
Text2.text = "Second color";
var RSlider2 = MainPanel.add ("slider");
RSlider2.minvalue = 0;
RSlider2.maxvalue = 255;
RSlider2.value = Math.round (SecondColor[0] * 255);
var RNumber2 = MainPanel.add ("statictext", undefined, RSlider2.value);
RNumber2.preferredSize.width = 25;
RNumber2.graphics.foregroundColor = RNumber2.graphics.newPen (RNumber2.graphics.PenType.SOLID_COLOR, [1, 0, 0], 1);
RNumber2.graphics.disabledForegroundColor = RNumber2.graphics.foregroundColor;
RNumber2.graphics.font = ScriptUI.newFont (RNumber2.graphics.font.name, "Bold", RNumber2.graphics.font.size);
var GSlider2 = MainPanel.add ("slider");
GSlider2.minvalue = 0;
GSlider2.maxvalue = 255;
GSlider2.value = Math.round (SecondColor[1] * 255);
var GNumber2 = MainPanel.add ("statictext", undefined, GSlider2.value);
GNumber2.preferredSize.width = 25;
GNumber2.graphics.foregroundColor = GNumber2.graphics.newPen (GNumber2.graphics.PenType.SOLID_COLOR, [0, 1, 0], 1);
GNumber2.graphics.disabledForegroundColor = GNumber2.graphics.foregroundColor;
GNumber2.graphics.font = ScriptUI.newFont (GNumber2.graphics.font.name, "Bold", GNumber2.graphics.font.size);
var BSlider2 = MainPanel.add ("slider");
BSlider2.minvalue = 0;
BSlider2.maxvalue = 255;
BSlider2.value = Math.round (SecondColor[2] * 255);
var BNumber2 = MainPanel.add ("statictext", undefined, BSlider2.value);
BNumber2.preferredSize.width = 25;
BNumber2.graphics.foregroundColor = BNumber2.graphics.newPen (BNumber2.graphics.PenType.SOLID_COLOR, [0, 0, 1], 1);
BNumber2.graphics.disabledForegroundColor = BNumber2.graphics.foregroundColor;
BNumber2.graphics.font = ScriptUI.newFont (BNumber2.graphics.font.name, "Bold", BNumber2.graphics.font.size);
RSlider2.onChanging = GSlider2.onChanging = BSlider2.onChanging = function () {
RNumber2.text = Math.round (RSlider2.value);
GNumber2.text = Math.round (GSlider2.value);
BNumber2.text = Math.round (BSlider2.value);
Red2 = Math.floor ((Math.round (RSlider2.value) / 255) * 100) / 100;
Green2 = Math.floor ((Math.round (GSlider2.value) / 255) * 100) / 100;
Blue2 = Math.floor ((Math.round (BSlider2.value) / 255) * 100) / 100;
}
var Apply = MainPanel.add ("button", undefined, "Apply changes");
Apply.onClick = function () {
var JSX = File ($.fileName);
JSX.open ("r");
var JSXXX = JSX.read ();
JSX.close ();
JSX.open ("w");
// This part is not clear to me. What should I replace the colors with?
JSXXX = JSXXX.replace (Red1, FirstColor [0]);
JSXXX = JSXXX.replace (Green1, FirstColor [1]);
JSXXX = JSXXX.replace (Blue1, FirstColor [2]);
JSXXX = JSXXX.replace (Red2, SecondColor [0]);
JSXXX = JSXXX.replace (Green2, SecondColor [1]);
JSXXX = JSXXX.replace (Blue2, SecondColor [2]);
JSX.write(JSXXX);
JSX.close ();
MainPanel.close ();
}
alert ("Color 1 : " + Red1 + " - " + Green1 + " - " + Blue1);
alert ("Color 2 : " + Red2 + " - " + Green2 + " - " + Blue2);
MainPanel.show ();
该对话框将包含在最终脚本中,并将用于更改对话框本身的颜色。
【问题讨论】:
-
您是否正在尝试更改正在运行的脚本中的 RGB 值???
-
是的,但是这个例子不是很清楚,所以我会更新这个问题。
标签: javascript adobe-indesign adobe-illustrator extendscript photoshop-script