Illustratorの最近のブログ記事

InDesignのスクリプト書きに慣れていると、たまにIllustrator用に書こうとするとえらい苦労をします。

今回は、Illustratorではページアイテムの取得したいのに入れ子のアイテムもひっくるめて全部返してくるので、選択ツール(黒い方)で選択したような戻り値を期待しても取得できないのに手間取ったのですが、達人たちはこんな時「選択アイテム限定」とすることで制御してるらいいのですが。
とりあえずグループアイテムを選択ツールで選択したときの数(app.selection.length)と同等のアイテムが取得できないものか試したときのメモ。

グループアイテムを何個かまとめてグループ化したもの
→groupItems.lengthだと入れ子たちもふくまれちゃう。
→これで一個になってほしい。

条件
  • 親がレイヤー
  • 子に何かしらのアイテムがある(一個でグループの場合も含む)
こんなのでいいのかな? 
groups_on_doc.png
result_of_group_check.png
トップレベルのグループアイテムを取得する。
#target "Illustrator"

var doc = app.documents[0];
var topG = getTopGroup(doc.groupItems);
alert("top level group:"+topG.length+ "\r" +
	"PageItems:" + doc.pageItems.length + "\r" +
	"PathItems:" + doc.pathItems.length + "\r" +
	"CompoundPathItems:" + doc.compoundPathItems.length + "\r" +
	"GroupItems:" + doc.groupItems.length + "\r" +
	"Selection:" + doc.selection.length);

/**
 * get top level group items
 * @param {Array} group Array of GroupItem
 * @returns {Array} tgr Array of top level GroupItem
 */
function getTopGroup (group) {
	var tgr=[];
	for (var i=0; i < group.length; i++) {
		//parent is Layer
		if(group[i].parent.typename == "Layer"){
			//group is formed with single path item
			if(group[i].pathItems.length == 1){
				tgr.push(group[i]);
			}
			//group is formed with compound path item
			if(group[i].compoundPathItems.length == 1){
				tgr.push(group[i]);
			}
			//group include any page items(textframe, pathitem)
			else if(group[i].pageItems.length != 0){
				tgr.push(group[i]);
				}
			}
		}
	return tgr;
}


ごめんなさい、懺悔します。

以前から一部の自前のスクリプトで何故かExtendScript Toolkitが勝手に立ち上がるときがあるなと思っていたのですが、最近はほとんどESTKを使わない日々が続き、今日やっと理由がわかりました。(今はTextMate使い)

ExtendScript のスクリプトの中に $.writeln( ) や $.write( ) がある(コメントアウトされていない)と
InDesignのScriptPanelなどのアプリケーションから実行しても、裏で ExtendScript Toolkit が勝手に起動してしまう(CS3だとESTK2がDOMのXMLをちくちく読み込みに行き、そしてXML読み込みに失敗する)ことになるのを知りました。


estk_xml.png

$.writeln( ), $.write( )はちゃんとコメントアウトします。反省。

//ESTKを立ち上げていない状態で
//アプリケーションから実行すると、ESTKが立ち上がってくれます。
$.writeln("Hello ESTK from backyard");

ExtendScriptの $オブジェクト(ヘルパーオブジェクト)は地味に便利です。
スクリプトを書くとき、デバッグに役立つのが $.writeln(message) や $.bp() や $.sleep() といったメソッド、また、多国語仕様にするときに役立つ $.localize などがあります。

そんな中に、実行途中でプレビューしながら色をつくるのに使えそうメソッドが
$.colorPicker();
ということで試してみました。たぶん、InDesignでもIllustratorでもPhotoshopでも使えます。

OSXの場合、こんなカラーピッカーが表示されます。

osxcolorpicker.png

//スクリプトの途中で色をプレビューしながら生成する
#target 'indesign';
var doc=app.documents.add();
var obj=doc.rectangles.add({geometricBounds:[20,20,150,150]});

var pick=$.colorPicker ();
if(pick==-1){exit();}
var pick16=pick.toString(16);

//Rが一桁のとき色が大ずれするのを回避
if(pick16.length==5){pick16="0"+pick16;}

col=doc.colors.add ({
	space:ColorSpace.RGB, 
	colorValue:[
		parseInt(pick16.substr (0, 2), 16),
		parseInt(pick16.substr (2, 2), 16),
		parseInt(pick16.substr (4, 2), 16)
		]})

//ここからRGBからCMYK変換、色が転びます
/*
col.space=ColorSpace.CMYK;

var cmyk=col.colorValue;
var valC=Math.round(cmyk[0]);
var valM=Math.round(cmyk[1]);
var valY=Math.round(cmyk[2]);
var valK=Math.round(cmyk[3]);
col.colorValue=[valC, valM, valY, valK];
	
var nameC="C="+Math.round(valC)
var nameM=" M="+Math.round(valM)
var nameY=" Y="+Math.round(valY)
var nameK=" K="+Math.round(valK)

col.name=nameC+nameM+nameY+nameK;
*/
//CMYK変換ここまで

obj.fillColor=col;

.colorPicker()の戻り値がRGBなのでカラーピッカーでCMYKを選んでも、CMYK〜RGB〜CMYKと変換されるので選んだ通りの数値になりません。Kulerもいっしょ。
昨日(100119)、DTP Booster 010に参加してきました。
今回は、あかつきさんと倉田タカシさんと鷹野雅弘さんのご三方でIllustrator特集。
最近あまりIllustratorをいじることが少なくなっていたのですが、刺激的な内容でした。

細かい内容は各人のwebサイトなどであがると思うので、かいつまんでコメントなど。

あかつきさん:
  • 標準サンプルスクリプトでの画像収集デモと配置画像の注意点(いい加減定着しろというか、変な機能たすなら、このスクリプトの内容を標準化したらいいと思う。)
  • BridgeでのXMPデータからの情報収集(情報はいろいろ埋め込まれている。いかに開かずにそれらを引き出すか、現状ではそれ用のビュー ワーがないのでみづらい。フォント確認ができても収集できないのもちょっとつらいなー、当人もBridgeネタをもう少ししたかったみたいなので、 Bridgeのスクリプト部分あたりまで突き詰めてもらいたいな)
  • グラフィックスタイルをスウォッチ的に使用する(オーバープリントのコントロール、アピアランスの線・塗の上下関係のコントロール、色の置換が楽かも、まぁ色だけでなく柔軟に利用しましょう。)
  • いつもの操作に修飾キーを追加してみる。(宝探し感覚でopt, shift, cmd, ctrlをつかうと何かみつかるかも、)
なにやら復讐型イベントを考えているみたいなので、今後の動向に期待したいとおもいます。

倉田タカシさん:
  • 倉田さんのファン多し。スクリプト使う人会場の4割くらい、書く人10人弱。
  • 「スクリプトはとんち、スクリプトはプラグインを簡単にしたもの、スクリプトは歯にくっつく、イラレバカ、スクリプト禁断症状」などの名言が。
  • お隣スクリプターたちをwebで紹介(あまり訊くことのできないスクリプターが他のスクリプターについてどう感じているかが知れて面白かった。shさん、PICTRIXさん、kamisetoさんのページが紹介されました。)
  • スクリプト+Aiで差し込み印刷的工程の試み。Ai+Psしかない環境なんかでは有効かも。そういう環境でデザインする人って結構いるみたいだし。(InDesign特集だったら今日来なかったってひといたし)
  • 言葉の壁って、たしかにあるなと思うけど。逆に英語のままの方がわかりやすい場合もあるのでなんでもかんでも和訳すればいいわけじゃないのがむずかしいところ。
  • 絶版になっていた古旗さんの本も、Adobe Illustrator CS3 + JavaScript 自動化サンプル集(PDF仕様)がでたのでスクリプターが広がると良いですね。
鷹野さん
ライブカラーとkulerについて駆け足で、本当に駆け足で紹介。短時間で話をまとめる話術、Appの強制終了したらさっさと見切りを付ける潔さに感動。そういえば、kulerって「くーらー」っていうんだ。ずっと「くらー」って読んでいました。
懇親会に来られていた高野雅弘さんとのダブルタカノセッションが見れる日を楽しみにしておこう思います。

ということで、みなさまお疲れさまでした。
今回、懇親会は無煙環境でよかった。

p.s.
せうぞーさんの今回の名言
「(アドビの)岩本さんを責めても世界は変わらない」みたいな用法で
「○○さんを(に)□□しても世界は変わらない」
は深いなーっておもいました。うん、使えそうだ。
特に多くは語りません。
Illustratorで黒以外のオブジェクトにかかったオーバープリントを解除します。
該当するオブジェクトがあれば、塗りごと、線ごとにダイアログに確認しながらオーバープリントを解除します。

孤立点とか、また別な問題があるドキュメントではエラーになる場合があります。そこまで面倒はみません。

move_dialog_aiid.jpg

Illustratorで
移動ダイアログで数値を変えながらコピーするのに、今まで数値いれて「コピーボタン」押すってやっていたのですが、あいかわらず面倒だなぁと思って、なにげにOptionキー(winはAlt?)押しながらOKボタン(というかEnterキー)したらコピーできるんだーって。
知らなかった。らくちんだなー。
InDesignの移動ダイアログではこれって機能しません。移動ってInDesignではほとんど使わないな、連続複製...があるから?

変形パネルやコントロールパネルの座標位置などの数値を確定するときにOption+Enterでもコピーになるみたい。こちらはInDesignもIllustratorも同じだ。

091217(Thu)1000ころ追記
winだと一部ちょっと違うみたい。
InDesign居残り補習室 移動ダイアログ
Illustratorのキーボードショートカットにおいて
デフォルトの状態ではファイルメニューの「配置...」にも、

AiPlace.png


編集メニューの「検索と置換...」にも、ショートカットは割り当てられていません。

AiFindReplace.png


本音では画像配置も文字組版も、それほど積極的にしたくないのかもしれません。
「私はレイアウトソフトではありませんから」って
ある媒体でやっとこQxp3からInDesign CS3に変換するのに伴って、Illustrator ver.8データ図版がいっぱいあるから変換しといて〜とページごとのデータをごっそりもらったので、とりあえずの変換用にJavaScriptで書いてみた。

変換時のポイントはver.10〜CSでのテキスト更新とocf,cid〜otfへのフォントの違い。
昔のデータだと拡張子無しとか禁止文字とかが多いんですよね。Photoshop.eps書類も混じってたりするので拡張子でフィルターをかけて処理できない。クリエータコードとか飛んでたりもするとも〜も〜。しかたがないので該当するIllustrator書類を開いた状態で実行することにしました。

こんな感じ
古いバージョンのIllustrator書類を「フォントを更新せず」に開いて実行。
Morisawa OTF, CIDを同名のOpenType Fontに置換、
カーニング="自動"、トラッキング="0"に変更、
ファイル名は"○○○○_.eps"でアンダーバー付きにしてCS3 eps再保存。
元ファイルはそのまま保存しないで閉じます。

既知の問題点
フォント情報をもった孤立点があるとフォント置換しません。あと、フォント情報をもった空のパステキストに色がついた線オブジェクト(グラフィックを文字ツールでクリックしちゃったみたいな)も同様に置換しません。そんな時はあとで削除なりアウトライン化してあげる必要があります。
(検出するスキルがなかった......)

EPS保存自体あれなんですが、いまなおプレビューをあえて意図して「Macintosh(8-bitカラー)」にしている人っているのだろうか。
Illustrator書類に配置された配置画像のファイル名と変倍率のチェックをするのに、書類点数も配置画像数もそこそこ多かったので、Ai用スクリプトをかいてみた。
多分、人力でやるよりは早くできたと思う。

開いているIllustrator書類に対して、別レイヤに変倍率とファイル名を書出し処理します。終わったら、eps書類を複製保存、オリジナルは保存せずに閉じます。
クリッピングマスクとグループ化あたりのエラー処理がツメ甘し、グループ化したものや複数画像にマスクしたものなどは取りこぼします、日本語ファイル名はサポートしません(濁点が化ける場合がありあます、OSXだけ?)。

とりあえず乗り切るための書き捨て御免な感じですいません。

duckyInfo.jpg

変倍率の出し方はkamisetoさんの
マトリックスの世界:JavaScriptからイラストレーターに貼付けてある画像の拡大率と角度を得る
 - なにする?DTP+WEB
を参考にしました。


JavaScript(ExtendScript)でアラートをスキップしてしまいたいようなとき。
または、ダイアログがでるようにリセット(おまじない)したいとき。
InDesign, Illustrator, Photoshopで違っているのでメモ。

#target 'indesign'
//ダイアログもアラートも出す
app.scriptPreferences.userInteractionLevel=UserInteractionLevels.INTERACT_WITH_ALL;

//ダイアログもアラートも出さない
app.scriptPreferences.userInteractionLevel=UserInteractionLevels.NEVER_INTERACT;

//ダイアログさない、アラートは出す。
app.scriptPreferences.userInteractionLevel=UserInteractionLevels.INTERACT_WITH_ALERTS;

#target 'illustrator'
//ダイアログ出さない
app.userInteractionLevel=UserInteractionLevel.DONTDISPLAYALERTS;

//ダイアログ出す
app.userInteractionLevel=UserInteractionLevel.DISPLAYALERTS;
#target 'photoshop'
//ダイアログもアラートも出す
app.displayDialog=DialogModes.ALL;

//ダイアログもアラートも出さない
app.displayDialog=DialogModes.NO;

//ダイアログさない、アラートは出す。
app.displayDialog=DialogModes.ERROR;

なぜかIllustratorだけ、2種類しかない。

TranslateThis

このアーカイブについて

このページには、過去に書かれたブログ記事のうちIllustratorカテゴリに属しているものが含まれています。

前のカテゴリはFileMakerです。

次のカテゴリはInDesignです。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

アーカイブ

Blog Parts