面倒なときに四角形に戻してしまうスクリプト(Ai)

えーと、相方さんが勢い良すぎて埋もれてしまいそうなので危機感を感じていますが、9月からこちら連日残業という感じでほとんど休めていないかんじのTenです。
まだまだ此処も工事が続いていて何やってんだろう……と思われる方も多いかと存じますが、生暖かく見守っていただけたらと思う次第です。
さて、先日CEPコマンドリファレンスをリリースしましたが、あちらの電書は制作に3年以上費やしている代物です。特にVulcanInterfaceの解説は殆ど書かれていないものですので色々とぶっ飛んだ処理を作る際には必須だと思いますのでうまくご利用いただけたらと思います。

続きを読む……

convertSampleColorメソッドについて

ほとんど参考になる資料がないということで書いておきます。
細かいことを説明すると内部的なカラーマッピングテーブルとかも説明しなくてはいけなくなるのでユースケースから見ていきます。
まずはRGB->CMYKへの変換です。この場合以下のように引数を与えます。

alert(app.convertSampleColor(ImageColorSpace.RGB, [255,0,0], 
       ImageColorSpace.CMYK, ColorConvertPurpose.defaultpurpose));

引数について1つ目が変換元のカラースペース、2つ目がカラー値で上のケースではRGBの数値を配列として与えます。3つ目が変換先のカラースペースです。4つ目が変換用途でこのオプションの影響については後述します。
実行すると指定のRGB値に応じたCMYK値が返されますが、この値はドキュメントに設定されたカラープロファイルの影響を受けます。
つづいてCMYKからRGBへの変換を見てみましょう。

alert(app.convertSampleColor(ImageColorSpace.CMYK,
     [0,0,0,100],ImageColorSpace.RGB,ColorConvertPurpose.exportpurpose))

先程とほぼ同じ構成です。ドキュメントのカラープロファイルが変換に影響するのは先程のRGB->CMYK変換と一緒です。ここではK=100をRGBに変換していますが、この場合ColorConvertPurposeの設定が大きく影響します。Illustrator初期設定ー>ブラックのアピアランススクリーンpreviewpurposeプリント/書き出しexportpurposeに対応して挙動が変わります。これらをリッチブラックに設定してあるとこの2つのパラメータではBlack Preservationが有効になり、内部のカラーマップを参照してRGB->[0,0,0]と最も暗い色に変換されます。defaultpurpose及びdummypurposeではBlack Preservationは効きませんからカラープロファイルからダイレクトに変換されます。また、環境設定で全てのブラックを正確に表示を設定してある場合でもBlack Preservationは働きませんのでdefaultpurposeと同じ結果になります。
これでいいかな? おもちくん???


パスオブジェクトを水平にしよう

みなさまにおかれましてはご清祥のこととお慶び申し上げます。

ということで、すでに本年も10%程経過してしましました。なにそれ、こわい! で、結構多忙で何もかも進まない状態のどん詰まりなのですが、ここんとこ結構冷え込んでオフトゥンから脱出するのが一苦労な状況です。みなさまにおかれましてはぱげでそれどころではないものと存じます。ということで、こっそりスクリプトを置いておきます。

続きを読む……


VS CodeをExtendScript用にセットアップする。(Mac版)

年末進行の慌ただしい中、ESTKが停止して世界が阿鼻叫喚に見舞われたことは記憶にあたらしいのですが、そんな中でさらっとESTKは32bitだからもう捨てるね(^-^)/なんて話も飛び出してwwwまあ、大変だったのですが、VisualStudio Codeのプラグインがリリースする事が発表されたのは朗報と言うべきでしょう。以前からVS Code慣れとけって言ってたのはこれに対応する為だったのですが、どれだけの人が真に受けたのでしょうかw
しかしながら、コードヘルパーの実装は見送られるようです。これはいけない、なんとかしなければって思ったのですが、世界は広いものでVS CodeでES編集する手法がありました。
 
こちらなのですが、TypeScript型定義ファイルを用意してTypeScript上でExtendScriptを編集してしまおうという乱暴な方たちです。
 
続きを読む……

[AI]スクリプトからのエフェクト操作

今回の投稿はクリスマスシーズンに入りましたので、DTPアドベントカレンダーへの投稿として簡単にまとめてみました。
これから年末にかけて多忙な日が続くとは思いますが、皆様が健康にクリスマス〜新年を迎えられますように(^-^)/
 
さて、IllustratorのスクリプトではapplyEffectというメソッドが存在します。これはIllustratorの効果メニューの各項目をスクリプトから適用するためのメソッドです。これに関しては
 
で言及してあります。しかし、この記事にも限界があります。FXG形式の書き出しはCS6以降では廃止された為、それ以降に実装された効果に関しては引数であるXMLを組み立てるためのパラメータがわからないのです。
ということで様々な方たちが色々なところを掘り返してパラメータを調べ始めました。以降でまとめられる手法は上海のスクリプターmoluappleがまとめたものを解説したものです。
 
 
 

コンテンツリカバリーモードを設定する

以下のスクリプトをIllustratorで1回実行し、コンテンツリカバリーモードを設定する。(on/offトグル動作なのでもう一度実行するとリカバリモードを抜ける)
 
app.preferences.setBooleanPreference("aiFileFormat/enableContentRecovery",
!app.preferences.getBooleanPreference("aiFileFormat/enableContentRecovery"));
 
 

Illustrator書類をテキストエディタで開けるようにする

効果をかけたオブジェクトを含むファイルを予め作成しておき、そのファイルをコンテンツリカバリモードで保存します。
 
  1. Illustrator上でファイルを開くダイアログを表示。(まだファイルを開いてはいけません)
  2. 対象ファイルを選択した状態で「Command + Option + Shift(Mac)」「Ctrl + Alt + Shift (Windows)」をプレスしたまま開くボタンをクリックする。
  3. 空のドキュメントが開いた状態で対象ファイルが開かれるのでそのまま閉じる。
 
以上の手順で対象ファイルと同一のフォルダに頭に「_」が付いたファイルが保存されています。
このファイルをテキストエディタで開いて以下の正規表現で検索します。
「BasicFilter\s:\n\((.+?)\)\s1\s0\s\/Filter」
 
以下は「角を丸くする…」の記述部分がヒットしたものです。
/BasicFilter :
(Adobe Round Corners) 1 0 /Filter ,
1 /Visible ,
(Adobe Illustrator.app) /PluginFileName ,
(\212p\202\360\212\333\202\255\202\267\202\351) /Title ,
/Dictionary : /NotRecorded ,
2 /Real (radius) ,←逆ポーランド記法で値とDict名称が書かれている。
/Dict ;
 /Part ,
 
このままではapplyEffectメソッドの引数のXML構造にはなりませんので整形が必要となります。
 
テンプレート
'<LiveEffect name="">'
+'<Dict data="'
+' '
+' I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>'
 
上記のテンプレートのDict dataの値として検索でヒットした/Dictのパラメータを成形加工します。
角を丸くする…コマンドの/Dictは以下に抜き出した1行のみです。
2 /Real (radius) ;
  ↓
R radius 2 //(データ型を表すアルファベット1文字、データ名称、数値の3点をスペース区切りで記述する)
 
上記のパターンで/Dictにエントリされている全てのパラメータを整形します。
データ型は、Real→R、Integer→I、Boolean→Bの3点が存在します。
この例ではDictエントリが1点だけなので最終的なXMLは以下の様になります。
'<LiveEffect name="Adobe Round Corners">'
+'<Dict data="'
+'R radius 2'
+'I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>'
 
これを用いてスクリプトを書くと「角を丸くする…」は以下のようなスクリプトになります。
var xmlstring = '<LiveEffect name="Adobe Round Corners">'
+'<Dict data="'
+'R radius 2 '
+'I Adobe Effect Expand Before Version 16 " />'
+'</LiveEffect>';
app.selection[0].applyEffect(xmlstring);
 
エフェクトを検索する作業も楽しいので是非お試し下さい。


ESTKが「#1116」エラーを吐く問題について

これは内部的に利用しているjsxファイルにオーバーフローを生じる変数が存在するために起こるものです。Adobe Deveroper Ecosystemチームが既に原因を特定していて修正手順を公開しています。しかしながら、ESTK自体が既にディスコンなので公式にパッチを当てたバージョンがリリースされるかどうかは微妙なところです。

詳細は自動化総合フォーラムのログである以下のPDFをご確認ください。

ExtendScript Toolkitがエラーを表示して正常に実行できない問題について | Adobe Community
モノグサな方は以下のワンライナーをターミナルで実行して下さい。そうそう、使えるのはデフォルトのインストール位置の場合だけなのでご注意を(^-^)/

sed -i -e 's/604800000/604800/g' /Applications/Adobe ExtendScript Toolkit CC/ExtendScript Toolkit.app/Contents/SharedSupport/Required/cdic/11BTBackend.jsx

AdobeのDeveloper Ecosystemチームはわりと新しい部署なのですが、Ash Ryan率いるメンバーは非常に動きが早くスキルレベルも高いです。
色々と過渡期ではあるのですが、彼らには頑張っていただきたいと思います。

※ものかのせんせーにパッチアプリお願いしました〜(^ー^)・

追記
ものかのセンセーがパッチアプリにしてくれました!
https://m.box.com/shared_item/https%3A%2F%2Fapp.box.com%2Fs%2F71iocxhtq68n4udusorvx2623asobojl

上記から圧縮ファイルをダウンロードし、「RepairESTK-100.tbz2」右クリックメニュー[開く]選択して解凍します。
出てきた「Repair ESTK .app」を選択して右クリックメニュー[開く]を選択します。その後「ExtendScript Toolkit.app」をドラッグ&ドロップして下さい。
環境によってはシステム環境設定のセキュリティとプライバシーのダウンロードしたアプリケーションの実行許可の項目について変更が必要な場合があります。