Photoshopスクリプトで はまった所

はまったのでメモ:

環境


その1:ExportOptionsSaveForWeb の MatteColorの設定の仕方

NG:

var val = new Photoshop.ExportOptionsSaveForWeb();

if( val.MatteColor == null)
    {
        val.MatteColor = new Photoshop.RGBColor();
    };

val.MatteColor.Red = 16;
val.MatteColor.Green = 128;
val.MatteColor.Blue = 255;

↓ 実行時エラー:

System.Runtime.InteropServices.COMException (0x80040500): プロパティは初期化されませんでした
   at System.RuntimeType.InvokeMember(String name, BindingFlags bindingFlags, Binder binder, Object target, Object[] providedArgs, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParams)
   at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Object[] aArgs, Boolean[] aArgsIsByRef, Int32[] aArgsWrapperTypes, Type[] aArgsTypes, Type retType)
   at Photoshop.ExportOptionsSaveForWebClass.get_MatteColor()

null ではないが、RGBでもない未定の状態(CMYKかもしれない)で、RGBを指定してしまっているのでエラーになっている・・・のか?

OK:

var val = new Photoshop.ExportOptionsSaveForWeb()
    {
        MatteColor = new Photoshop.RGBColor() // ★
        {
            Red = 16,
            Green = 128,
            Blue = 255,
        },
    };

その2:DoJavaScriptFile の引数

スクリプトファイルを実行する関数

第2引数で、ファイルにパラメーターを渡せる

DoJavaScriptFile
1. JavaScriptCode (String)
2. [, Arguments] (Array)
3. [, ExecutionMode] (PsJavaScriptExecutionMode)

f:id:kawaishi2:20210106144953p:plain


string の配列だとだめ???

NG(?):

string[] sArray = new[] { "a", "b" };
ps.App.DoJavaScriptFile(JsPath, sArray, Photoshop.PsJavaScriptExecutionMode.psDebuggerOnError);

Adobe フォーラムで検索

ここを参考に:

community.adobe.com


object の配列にしたらできた

OK:

string[] sArray = new[] { "a", "b" };
var cArray = sArray.Cast<object>().ToArray();
ps.App.DoJavaScriptFile(JsPath, cArray, Photoshop.PsJavaScriptExecutionMode.psDebuggerOnError);

おわり