IllustratorのLiveEffectメソッドがなんとかなった!

まずはこちらから

[youtube https://www.youtube.com/watch?v=6Bk2sJQkU0w]

おわかりいただけますでしょうか? エフェクトがダイアログ無しで次々に適用されていっています。これは全てLiveEffectを記述したjsxファイルを用意し、Illustratorのメニューに登録した上でスクリプト自体をショートカットにて実行しています。 実際に利用しているのはアプリケーションクラスに存在するapplyLiveEffectメソッドです。元ネタはhttps://forums.adobe.com/thread/1877476オリジナルソースを確認したい方はリンクを踏んで下さい。

日本語による解説は続きを…

まずはサンプルから

var str = ‘<LiveEffect name=”Adobe Drop Shadow”><Dict data=”R horz 7 I blnd 1 R opac 0.75 R dark 100 B pair 1 I csrc 0 R vert 7 R blur 5 B usePSLBlur 1 I Adobe Effect Expand Before Version 16 “/></LiveEffect>’;<br />
app.selection[0].applyEffect(str);

こちらの例はスタイライズ->ドロップシャドウをスクリプトから数値指定で適用するものです。このようにapplyEffectメソッドの引数はXML形式です。LiveEffectのnameプロパティに適用するエフェクト名を、Dictのdataプロパティに各種設定に対する数値等を記述します。この様に暗号のようですが、ある程度予想することは出来ると思います。しかし、現在有効なLiveEffect全てを調査することは不可能です。これは、このパラメータ調査方法に起因するもので、パラメータ群を取得するにはエフェクトを適用したファイルをFXG形式で書き出したものを参照する必要があるためです。このFXG形式ファイルを書き出せるのがCS5・6だからです。
書き出したFXGファイルをテキストエディタで開くと

 ・
 ・
 ・
            <ai:LiveEffects>
              <ai:LiveEffect index=”0″ major=”1″ minor=”0″ name=”Adobe Fuzzy Mask”>
                <ai:Dict data=”R Radius 2.835 “/>
              </ai:LiveEffect>
            </ai:LiveEffects>
 ・
 ・
 ・

という具合にLiveEffectの情報が記述されています。この例ではスタイライズ->ぼかしが適用されたものです。
これを整形して

  ‘<LiveEffect name=”Adobe Fuzzy Mask”>< Dict data=”R Radius 2.835 ” /></LiveEfect>’

という形のXMLにします。あとはメソッドに引数として渡してあげるだけです。詳細は上記リンクからたどることが出来ます。
おそらくですが、Rがreal、Iがint、Bがbooleanで「型 名前 値」と並んでいると思われます。
以下に示すのは代表的なライブエフェクトのパラメータです。細かい解析はしてませんが以下の様な指示でコントロールできます。

#Drop Shadow
<LiveEffect name=”Adobe Drop Shadow”><Dict data=”R horz 7 I blnd 1 R opac 0.75 R dark 100 B pair 1 I csrc 0 R vert 7 R blur 5 B usePSLBlur 1 I Adobe Effect Expand Before Version 16 ” /></LiveEffect>

#Fuzzy Mask
<LiveEffect name=”Adobe Fuzzy Mask”><Dict data=”R Radius 5 ” /></LiveEffect>

#Inner Grow
<LiveEffect index=”0″ major=”1″ minor=”0″ name=”Adobe Inner Glow”><Dict data=”I gtyp 1 I blnd 2 R opac 0.75 R blur 5 “><Entry name=”gclr” valueType=”F”><Fill color=”1 0 0 0 0″/></Entry></Dict></LiveEffect>

#Outer Grow
<LiveEffect name=”Adobe Outer Glow”><Dict data=”I Adobe Effect Expand Before Version 16 I blnd 2 R opac 0.75 R blur 5 B usePSLBlur 1 ” /></LiveEffect>

#Scribble Fill
<LiveEffect name=”Adobe Scribble Fill”><Dict data=”R Spacing 5 R EdgeOverlap 0 R Scribbliness 0.05 R StrokeWidth 3 R Angle 30 R EdgeOverlapVariation 5 R SpacingVariation 0.5 R ScribbleVariation 0.01 ” /></LiveEffect>

#Round Corners
<LiveEffect name=”Adobe Round Corners”><Dict data=”R radius 10 “/></LiveEffect>

#Outline Type
<LiveEffect index=”0″ isPre=”1″ major=”1″ minor=”0″ name=”Adobe Outline Type”><Dict /></LiveEffect>

#Outline Stroke
<LiveEffect index=”0″ major=”1″ minor=”0″ name=”Adobe Outline Stroke”><Dict /></LiveEffect>

#Offset Path
<LiveEffect name=”Adobe Offset Path”><Dict data=”R mlim 4 R ofst 10 I jntp 2 ” /></LiveEffect>

#Zigzag
<LiveEffect name=”Adobe Zigzag”><Dict data=”R roundness 0 R absoluteness 1 R relAmount 10 R ridges 4 R amount 10.006 ” /></LiveEffect>

#Free Disort
<LiveEffect name=”Adobe Free Distort”><Dict data=”R src3h 278 R src2h 178 R dst2v -263 R src2v -263 R src0h 178 R dst2h 178 R src3v -263 R dst3v -263 R dst0v -163 R src1h 278 R src1v -163 R src0v -163 R dst0h 178 R dst1v -163 R dst1h 278 R dst3h 278 ” /></LiveEffect>

#Punck & Bloat
<LiveEffect name=”Adobe Punk and Bloat”><Dict data=”R d_factor 10 ” /></LiveEffect>

#Twirl
<LiveEffect name=”Adobe Twirl”><Dict data=”R angle 30 ” /></LiveEffect>

#Pathfinder
<LiveEffect name=”Adobe Pathfinder”><Dict data=”R TrapTintTolerance 0.05 B ExtractUnpainted 1 B TrapConvertCustom 0 R TrapAspect 1 B ConvertCustom 1 R TrapMaxTint 1 R Mix 0.5 B RemovePoints 0 I Command 0 R TrapThickness 0.25 R TrapTint 0.4 B TrapReverse 0 R Precision 10 “><Entry name=”DisplayString” value=”” valueType=”S” /></Dict><LiveEffect>

#3D Effect
<LiveEffect name=”Adobe 3D Effect”><Dict data=”B showHiddenSurfaces 0 R cameraPerspective 0 I rotationPresetKey 9 B paramsDictionaryInitialized 1 I 3Dversion 2 B extrudeCap 1 R mat_12 -0.278 R mat_13 0 R mat_20 -0.456 R mat_21 0.248 R mat_22 0.855 R mat_23 0 R mat_30 0 R mat_31 0 R mat_32 0 R mat_33 1 R rotX -18 R rotY -26 R rotZ 8 R revolveAngle 360 B revolveCap 1 R revolveOffset 0 I revolveAxisMode 0 I surfaceStyle 3 R surfaceAmbient 50 R surfaceMatte 40 R surfaceGloss 10 R blendSteps 25 B invisibleGeo 0 I shadeMode 3 B preserveSpots 0 I numLights 1 B shadeMaps 0 I numArtMaps 0 R mat_11 0.961 R mat_10 0.002 R mat_03 0 R mat_02 0.438 R mat_01 0.125 R mat_00 0.89 I effectStyle 0 R bevelHeight 4 B bevelExtentIn 1 R extrudeDepth 50 “><Entry name=”shadeColor” valueType=”F”><Fill color=”1 0 1 1 0″/></Entry><Entry name=”light0″ valueType=”D”><Dict data=”R lightDirX 0.39 R lightDirY 0.33 R lightDirZ -0.85 R lightPosX 0 R lightPosY 0 R lightPosZ -1 R lightIntensity 1 ” /></Entry><Entry name=”DisplayString” value=”3D ” valueType=”S”/></Dict></LiveEffect>

一部対応しきれない物もありますがある程度の事は出来そうです。しかしながら、塗りや線を追加したりということが出来ませんのでそういった部分はオブジェクトをダイレクトにコピーとかしないといけません。この辺りをもう少し改善してほしいものです。

ten_a

Graphic Designer, Scripter and Coder. Adobe Community Professional.

シェアする

1件のコメント

[AI]スクリプトからのエフェクト操作 | CC Labo へ返信する コメントをキャンセル