ExtendScript用エディタ・エクステンション

あけおめどぞよろという事で平成最後となりましたが、この30年ちょいという期間はほとんどをAdobe社と歩んで来たという印象です。良いんだか悪いんだか自分でもよく分かりませんw
後半の方はひたすら自分が面白いと思う方向へ全力で傾倒して行ったような気がします。そしてしびれを切らした某社が反応せずにはいられなくなったという事なんだと思います。
2019年はいろんな意味で節目を迎える年であり、これより変革へと突き進む激動の時期へと移行します。
まず大きな変化はExtendScriptを取り巻く環境の変化から始まります。昨年末のESTKのトラブルからデベロッパー・エコシステムチームの公式の声明よりESTKの開発停止の報が流れました。それに伴い新しい編集・デバッグ環境についても情報が流れました。
そんなこんなで第1四半期は情報待ちです。みなさまにおかれましてもまずはVS Codeに慣れるように今から準備していただきたいと思います。

codeeditorv102

さて、そうこう言いましても現状ではESTK等を利用する他ありません。しかし、そこら辺を放置したままというのも片手落ちですから重い腰を上げてエクステンションを用意しました。と言いつつも以前適当に作ったやつの更新なのですがw
以下のリンクよりzxpファイルをダウンロードしてください。

https://drive.google.com/file/d/0B8WPQj-WNG_TbV9zblJGVUpPWDA/view?usp=sharing

インストールにはあなすたしーずえくすてんしょんまねーじゃーが便利かと思います。しかしながら、7z形式の圧縮ファイルですから解凍した上でExtensionsフォルダーに投入してもOKです。
キーマップはvimです。ご注意を(^o^)/

広告

[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);
エフェクトを検索する作業も楽しいので是非お試し下さい。

スクリプト環境の整備(AdobeMaxJapan2018フォローアップ1)

今回の投稿はAdobe Max Japan2018にて私が担当したワークショップ「使わないと損をする! Illustrator & InDesignのScript活用講座 〜あれもこれも便利になります〜」のフォーローアップエントリーになります。
不幸な事に当日は丁度ExtendScript Toolkit CCが不具合が発生した当日で、不具合を起こしたプラットフォームがMacintoshだったこともありWindowsを利用していたためワークショップ中はわたし自身も全く気がついていませんでした。実際に参加者の皆様の中にはESTKが動作しなくて困られた方もおられたようで申し訳ない状況でした。
この不具合に関する情報収集及び対処方法等を確認する作業を優先させたためにフォローアップが後手に回ってしまいました。申し訳ございません。

しかし、結果としてはESTKの修正処理の簡素化等成果が出ていますのでスクリプトを学び、活用して行こうと考えられている方々にはこれで良かったのだろうとは思っています。
ESTKのエラーに関しては以下のAdobe フォーラムのドキュメントをご確認いただきご自身の手で修正作業を行っていただきたいと思います。

https://forums.adobe.com/docs/DOC-9621

さて、フォローアップについてです。今回のワークショップのテーマはスクリプトを活用することでどの様に日頃の作業を楽にできるかと言う部分をお見せし、体感していただくことでした。その中でスクリプトによる操作の概念なども簡単にご説明させていただきました。しかしながら、短い時間という事もあり概要的な解説になっています。この様な部分は充分に時間をかけて説明するべき部分なのです。今回から数回の連載という形で関連情報及び解説をお届けしようと思います。

続きを読む

ExtendScript用OpenCVラッパー

基本的にNoReferenceでのご提供でございます。

こちらは/Library/Framework/に投入。
https://drive.google.com/open?id=1g9yBguBj61pEcO_tTWcNe41tkYllRc3C

以下を解凍すると必要なものが揃っています。
https://drive.google.com/open?id=1me95GKDUjn0BI3nIXsyCYkp6p8s_XPOU
全部同じ階層においておけば動作可能。Frameworkはユニバーサル構成ですから32bitのESTKからも実行可能。ExternalObjectをコールして帰ってくるのは顔のバウンズです。とりあえずjsxファイルの構成を確認してご利用ください。

恐らくOSX10.9以降なら動作するとおもわれます。

Reset Textframes Transformation.

texttransform1

Here is a little working concept code you can reset your selected textFrames shear, rotate and reflection. TextFrames have transform matrix. Here is a snipet of get it from a selected textFrames.

alert(app.selection[0].matrix); //Select only target textFrame.

We can invert it using applications method like below

alert(app.invertMatrix(app.selection[0].matrix));

Previouse two snipets return same “[Matrix]”. However, 2nd matrix is inverted values as you see below that make the Property Explorer’s result.

texttransform2texttransform3

You can use below to test how it works.

var mtx = app.invertMatrix(app.selection[0].matrix);
 mtx.mValueTX = 0;
 mtx.mValueTY = 0;
 app.selection[0].transform(mtx)

*Both TX and TY values are global position. when you inverse it, object moves to outside of maximum canvas size range. Therefor, we need reset these values to 0.

 

For Japanese…

という事で、諸事情により当面こういった入り混じり系のCodeで話しましょうw状態になります。
今回のものはテキストフレームが持つMatrixプロパティーを利用して変形を元に戻そうというものです。一つ注意が必要なのは変倍は長・平体へ適用されるためマトリクスには情報が含まれませんので戻しようがないところです。まあ、シアーとか微妙な回転をリセット出来るという点は便利ですが…

PNGファイルの情報を読み出すツール

データを取り回しているときに単純なファイル情報を取得して利用したくなる場合が多くあります。例えば画像の縦横のピクセル数とかカラーモードとかとか…
もちろんXMPとか参照したりPSにて調べたりというものありなのですが、もっと簡単にできれば便利じゃないかな???
って思いました。で、出来たのがJPGToolとかいうやつです。こちらはJPGファイルの基本的な情報をバイナリ検索して抽出するものでした。ぐぐればすぐに見つかるので見てみるのも良いでしょう。
しかし今回、なんでPNG見れないんだっ?てなって急遽PNGの情報を抜き出すやつを書きました。

続きを読む

Apple Color Emojiフォントを見本になにかする その2

後回しにしたチェックサムの件…

OTFフォントのチェックサムというのはとても面白い仕組みです。基本的に32bitの符号なし整数なのでファイルの頭から4バイトづつ読み出して全部足した下位32ビット分がそれに当たるのですがどのフォントを見ても0xB1B0AFBAになります。日本語フォントであろうが欧文フォントであろうが0xB1B0AFBAです。TrueType、ポストスクリプト系等は全く関係ありません。それもそのはず、headテーブルにChecksum Adjustmentっていうやつがあって、全体足したやつを0xB1B0AFBAから引いたデータとして書き込んであるからです。本日の豆知識でしたw

続きを読む