スナックelve 本店

バツイチ40代女の日記です

イラストレーターのスクリプトを初めて作ったよ!


イラストレーターでフレームを作って、指定のフォルダ(素材フォルダ)に有る素材を嵌めてpngで出力したいぞ、と。

さてどうすっか。

  1. 素材フォルダの中のpngファイルを新しいレイヤーにどんどん配置していって、非表示にする。
  2. 非表示のレイヤーから一つづつ表示にしてpngで出力する。

という2ステップにしました。
スクリプトコードがネットに有るおかげで私も助かりました(ほぼ流用)のであげておきます。
実行したのはIllustrator CS6(64bit)です。

新規レイヤーにオブジェクト配置するスクリプト

最初に配置したい大きさの四角とか作ってそれを選択して実行
スクリプト
dtpstepup.blog47.fc2.com

//現在選択しているオブジェクト
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;

  //レイヤー追加
  doc = activeDocument;

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

  if (Pfolder != null){
    //素材フォルダのpngファイルのリスト
    Plist = Pfolder.getFiles("*.png");
    A = Plist.length;         //画像の数

    //素材png数分ループ
    for(i=0;i<A;i++){
      //素材ファイル
      Pfile = new File(Plist[i]);
      //レイヤー追加
      lay = doc.layers.add();
      //レイヤー名素材X
      lay.name="素材"+i
      //配置位置に素材ファイル配置
      Phaiti = docObj.placedItems.add();
      Phaiti.file = Pfile;
      Phaiti.position = [Xo,Yo];

      Porgw = Phaiti.width;     //画像の元の幅
      Porgh = Phaiti.height;      //画像の元の高さ
      
      幅と高さ小さいの比率で画像のサイズ変更
      if(Sw/Porgw < Sh/Porgh){    //幅基準
        Phaiti.width = Sw;
        Phaiti.height = Sw/Porgw*Porgh;
      }else{                //高さ基準
        Phaiti.height = Sh;
        Phaiti.width = Sh/Porgh*Porgw;
      }
      //非表示
      lay.visible = false;
    }
  }
  //元画像削除
  sel[0].remove();
} 

レイヤーごとにpngファイル出力

素材X(Xは数字)のレイヤーを一つずつ表示にしてpngで出力
スクリプト
namayakegadget.com

layObj = activeDocument.layers;
layNum=layObj.length;
for (i=0; i<layNum; i++)
{
  if (layObj[i].name.indexOf("素材") === 0)
  {
    //レイヤー表示
    layObj[i].visible = true;

    // pngの書き出しを設定する(デフォルト設定)[設定できる範囲や仕方など]
    var pngOpt = new ImageCaptureOptions();

    // 解像度(150)[72.0-2400.0]
    pngOpt.resolution = 200;

    // アンチエイリアス(false)
    pngOpt.antiAliasing = false;

    // 透過設定(false)
    pngOpt.transparency = false;
    pngOpt.matte = false;


    // 保存する場所と名前を設定する
    var fRef =app.activeDocument;

    // 現在のレイヤー名+ファイルの名前で拡張子をpngに変える
    var myname =  layObj[i].name + fRef.name;
    var newname = myname.replace(/\.ai/g,".png");

    // 現在のファイルの場所を取得し、フルパスを作成する
    var mypath = fRef.path;
    var newpath = mypath+"/"+newname;


    // 保存する範囲を指定するためにアートボードの大きさを取得
    var rect = fRef.artboards[0].artboardRect;

    // 書き出しを実行
    saveFile = new File(newpath);
    activeDocument.imageCapture(saveFile, rect, pngOpt);
    
    //レイヤー非表示
    layObj[i].visible = false;

  }
}

なんかプリセットのところにファイル置いても表示されないので、アクセスしやすいところにおいて都度読み込みました。
デバッグ用にVS Codeのエクステンション入れたりしたけどよくわからなかった(爆)