FC2ブログ
QLOOKアクセス解析

DTPを快適に!

なにかと短時間作業を強いられることの多いDTPの仕事。この苦しみから少しでも解放されたい思いで、只今勉強中!javascript、applescriptの習得を中心にその他のチップス、素材のことなんかを書いていきます。

2009年05月の記事

複数画像並べて配置 by illustrator javascript

illustratorCSの頃からなんでしょうか? 画像をファインダーやBridgeからドラッグ&ドロップで配置可能になりました。それも複数!これは便利bikkuri01

ちなみにですが、私は使い始めの頃、リンクで配置したいのに埋め込みになったり、ならなかったりして、これは使えないbikkuri01とずっと思っていました。
何かの時に、ネットで見つけました。「Caps lock」です。
CapsをOnにしておくと埋め込み、Offにしておくとリンクになるようです。これで一気に使える機能になりました。これって常識?

でも、この使える機能、使っていると人間欲がでるもので、もう少し便利にならないかなと、思ってしまうわけです。
それは、複数を一気に配置する時です。複数配置が今まで出来なかったので、便利になってはいるのですが、一気にドラッグすると、同じ所に重なって配置されるのです。それも大きいのも小さいのも。

これを結局、大きさをそろえつつ、一つ一つめくりながらタイル状に並べてる私です。
これはjavascriptでつくらなければ�s�[�X
というわけで初めからタイル状に配置するスクリプトを作ってみました。
ただし、ファイル形式をとりあえず、epsのみとしました。

◆スクリプト
スクリプトはこんな感じです。

docObj = activeDocument;
sel = activeDocument.selection;

if(sel.length == 1){

Xo = sel[0].left;
Yo = sel[0].top;

Sw = sel[0].width;
Sh = sel[0].height;

slt = 0.2; //隙間の比率


Pfolder = Folder.selectDialog("画像フォルダを選択して下さい","" );

if (Pfolder != null){
Plist = Pfolder.getFiles("*.eps");

A = Plist.length; //画像の数

Ay = Math.round(Math.pow(A*Sh/Sw,0.5)); //縦に並べる数
Ax = Math.ceil(A/Ay); //横に並べる数

Pmaxw = Sw/(Ax+(Ax-1)*slt); //画像の最大幅
Pmaxh = Sh/(Ay+(Ay-1)*slt); //画像の最大高さ

for(i=0;i < A;i++){
Py = Math.floor(i/Ax);
Px = i-Py*Ax;

Pfile = new File(Plist[i]);

Phaiti = docObj.placedItems.add();
Phaiti.file = Pfile;
Phaiti.position = [Xo+Px*(1+slt)*Pmaxw,Yo-Py*(1+slt)*Pmaxh];

Porgw = Phaiti.width; //画像の元の幅
Porgh = Phaiti.height; //画像の元の高さ

if(Pmaxw/Pmaxh < Porgw/Porgh){ //幅基準
Phaiti.width = Pmaxw;
Phaiti.height = Pmaxw*Porgh/Porgw;
}else{ //高さ基準
Phaiti.height = Pmaxh;
Phaiti.width = Pmaxh*Porgw/Porgh;
}
}
sel[0].remove();

}

}else{
alert("画像配置範囲となるオブジェクトを1つだけ選択して、再度実行して下さい");
}

↓↓ここからダウンロード出来ます。右クリック等でお願いします。
「複数画像並べて配置.js」

このブログでは「.jsx」形式がアップできなかったので「.js」としました。
(・・・・・誰か違いをおしえて!)

◆使い方
★まず、スクリプト実行前に、画像を並べる範囲を指定します。これは四角等のオブジェクトを描くことで範囲指定としました。オブジェクトは丸でも星形でもいいのですが、そのオブジェクトの幅と高さの範囲に画像を並べていきます。
オブジェクトを描いたらそれを選択状態にしておきます。

★選択したままスクリプトを実行します。
 javascriptの基本的な実行の仕方は以前のエントリーを見て下さい。

★画像の入ったフォルダの場所を聞かれますので、指定して下さい。

★すると、オブジェクトで指定した範囲に画像が並びます。オブジェクトは不要なので削除されます。

◆スクリプト概要
画像の並び方は、画像と画像の間にある程度すき間をとりながら、指定した範囲内で画像が大きく取れるようにしました。(この計算がちょっとやっかいでした��G
オブジェクトの縦横比にあわせて、画像の数だけマス目をつくり、そのマス目にあわせて、縦長だったり横長だったりする画像を拡大縮小して納めています。
並び順はファイル名順に左上から右へ、右端まで行くと下の段へとなります。

最初の方でとりあえずepsだけと言いました。
11行目(空行のぞく)に「Plist = Pfolder.getFiles("*.eps");」とあります。
これは拡張子epsのファイルだけを抽出している文です。例えばこのepsをpsdとすると、psdでも可能となります。

私的には普段epsぐらいしか使わないので、epsなのですが、ここで困ったことが。
私はずっとmacを使いDTPをやっていて、お客様(印刷会社等)からも画像データを頂くことが多々あります。macを使っている人には拡張子の感覚がほぼゼロの方がいらっしゃいます。なので、epsもaiも拡張子がついていないことがよくあります。
自分もmac使いなのでそこは否定しないのですが、このscriptを実行する上では問題となりました。

先ほどの「Plist = Pfolder.getFiles("*.eps");」を「Plist = Pfolder.getFiles();」とするとすべてのファイルとなります。
これで実行すると
「.DS_Store」ファイルの形式では配置できません。

とエラーがでます。
mac osxではすべてのフォルダに「.DS_Store」という不可視ファイルが入ってます。
これが引っかかってしまうのです。

解決策
1.「.DS_Store」を無視する方法
2.拡張子なし画像ファイルを抽出する方法
3.その他

どなたか教えて下さいjumee��whyR

これでも1分ぐらい短縮になるでしょうか?

p.s. ブログのCSSテンプレート変えました。スクリプトをのせるのに横幅とりたかったので。そのうち、このあっさりとしたテンプレートを自分なりに変えたいのですが......