Illustratorで変数を削除するスクリプト
Illstratorで変数をまとめ削除したくてスクリプトを組んだが、その際に詰まったことの備忘録。
Illstratorで変数とは?
Illustratorはベクター画像を作るアプリだが、処理の自動化する機構も備わっている。
その代表的なものが「変数」機能で、特定のオブジェクトに対して動的にデータを書き換えることができる。(詳細はここ)。
Illstratorをscriptで自動化
この機能は似たスタイルの画像を大量に作る際は非常に便利なのだが、そのまま相手に渡してしまうとマウス操作を少しミスるだけで大惨事になる。
なので、校正や納品をする際には変数データを削除した状態のファイルで渡したほうが確実である。
手で削除してもいいのだが、面倒だし、ほかの自動化スクリプトに組み込んでしまうのが一番楽だ。
スクリプトを組む場合は以下を参照。
Adobe Illustrator CC Scripting Reference: JavaScript
変数をscriptで操作しよう
変数のデータはvariablesクラスにまとめて格納されている。
そして、クラス内に各変数データがvariableオブジェクトとして保管されている。
各オブジェクトへのアクセスはindexを指定する。
activeDocument.variables[0]; //変数1のオブジェクトにアクセス
全要素を先頭から削除するfor文を書くと...
var variableObj = activeDocument.variables;
for (i=0; i<variableObj.length; i++){
tmp = variableObj[i];
tmp.remove();
}
これだと一個飛ばしで削除されて、半分の変数データが残ってしまう。
variableオブジェクトはリスト構造で格納されている
C言語に慣れた身としてはindex指定するので配列のように操作してしまうが、リスト構造で格納されている。
一つ削除すると次要素へのポインタが更新されて、indexの数値が詰まる。なので、先頭から順次削除すると歯抜け状態になってしまう。
全要素をきれいに削除したい場合は後ろから削除していくのが吉。
try{
removeVariables(activeDocument); //変数情報を削除
}
catch(someError){
alert( "JavaScript error occurred. Message = " +someError.description)
}
// 変数情報の削除
function removeVariables(docObj)
{
var variableObj = docObj.variables;
var tmp;
// variablesクラスのvariableオブジェクトはリスト構造で格納されているので
// variablesクラスの中にあるvariableオブジェクトを後ろから順に削除
for (i=variableObj.length-1; i>=0; i--){
tmp = variableObj[i];
tmp.remove();
}
}
調べてみると、元々JavaScriptでは配列の要素操作はリスト構造でやっているらしい。
てへぺろ☆(・ω<)
Author And Source
この問題について(Illustratorで変数を削除するスクリプト), 我々は、より多くの情報をここで見つけました https://qiita.com/Kahiro-M/items/4839ae38e1123a493c7f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .