クリエイター手抜きプロジェクト[376]Adobe Illustrator CS4〜CC編 空のレイヤーを削除する/調べる
── 古籏一浩 ──

投稿:  著者:


Illustratorで制作していると、空っぽのレイヤーが残ってしまうことがあります。今回は、ドキュメントに残ってしまった空のレイヤーを削除するスクリプトです。

以下のスクリプトは開いているドキュメント内の空レイヤーを削除します。


// 現在のドキュメントの空レイヤーを削除する
function deleteLayer(){
var len = activeDocument.layers.length;
if (len == 1){
alert("レイヤーが一枚なので削除できません");
return;
}
for(var i=len-1; i>=0; i--){
var d = activeDocument.layers[i];
var t = d.compoundPathItems.length + d.graphItems.length +
d.groupItems.length + d.legacyTextItems.length + d.meshItems.length +
d.pathItems.length + d.placedItems.length + d.pluginItems.length +
d.rasterItems.length + d.symbolItems.length + d.textFrames.length;
if (t == 0){
d.locked = false;
d.remove();
}
}
}
deleteLayer();


ファイルが複数ある場合にも、空レイヤーを削除することができます。が、さすがに確認なしで削除処理してしまうのは不安があります(精神的にちょっとよろしくない)。そこで、ドキュメント内に空レイヤーがある場合だけ、ファイルを開くようにします。その後、上記スクリプトを使って空レイヤーを削除すればよいでしょう。


// 選択したフォルダ内にあるドキュメントを開いて空レイヤーがあるか調べる
function checkEmptyLayer(){
var fileList = getFiles(["*.ai"]);
for(var j=0; j<fileList.length; j++){
app.open(fileList[j]);
var len = activeDocument.layers.length;
if (len > 1){
for(var i=len-1; i>=1; i--){
var d = activeDocument.layers[i];
var t = d.compoundPathItems.length + d.graphItems.length +
d.groupItems.length + d.legacyTextItems.length + d.meshItems.length +
d.pathItems.length + d.placedItems.length + d.pluginItems.length +
d.rasterItems.length + d.symbolItems.length + d.textFrames.length;
// 1つでも空のレイヤーがあったら以後の処理はしない
if (t == 0){
break;
}
}
}else{ // ドキュメントを閉じる
app.activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
}
}
checkEmptyLayer();
// フォルダ内にある指定された拡張子のファイルを配列として返す
function getFiles(fileTypes, basePath,options){
options = options || {};
if(!basePath){
basePath = Folder.selectDialog("フォルダを選択してください");
if (!basePath){ return; } // キャンセルされた場合は処理しない
}
var allList = [];
// パラメータが文字の場合
if (typeof(fileTypes) == "string"){
getFileList(new Folder(basePath), fileTypes);
return toJapanese(allList, options.japanese);
}
// パラメータが配列の場合
if (fileTypes.push){
for(var i=0; i<fileTypes.length; i++){
getFileList(new Folder(basePath), fileTypes[i]);
}
return toJapanese(allList, options.japanese);
}
function getFileList(currentFolder, fileType){
var fileList = currentFolder.getFiles(fileType);
var fileList2 = currentFolder.getFiles("*"); // Sub Folder
allList = allList.concat(fileList);
for(var i=0; i<fileList2.length; i++){
if (fileList2[i].getFiles){
if (fileList2[i].name.charAt(0) == "."){ continue; }
getFileList(fileList2[i], fileType); // フォルダがある限り繰り返し
}
}
}
// 日本語に変換(nameJ, fullNameJ)
function toJapanese(fileList, flag){
if (!flag){ return fileList; }
for(var i=0; i<fileList.length; i++){
fileList[i].nameJ = File.decode(fileList[i].name);
fileList[i].fullNameJ = File.decode(fileList[i].fullName);
}
return fileList;
}
}


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/
>

土曜日は大雪で雪かき&運搬で終わり……。といけばよかったんですが、あまりに大雪なので物流が動かないかもということで、塩尻市〜豊科市を往復。

普通なら片道40分くらいのところが3時間以上かかって到達。高速道路が閉鎖したため、大型トラックが全部一般道にきて、さらにチェーンなしのためあちこちで動かなくなって道路が大渋滞。

道が狭いので、一台止まるとあっという間に幹線道路まで全部停止状態。チェーンを付けるか、2車線ある道路を作るかしないと,大雪のたびに止まる……。

長い名字の人のゴーストライター云々で、耳が聞こえないとか言われているけど、聞こえていないはず。だって、ゴーストライターの人が何度警告しても、聞く耳もたなかったと言っているので。

先週から新しいプリキュアが始まったけど、主役がどう見てもハイスクール奇面組のキャラ……。ハピネスチャージより印税チャージしてもらった方が嬉しいかも(笑)

・ハピネスチャージプリキュア
< http://www.toei-anim.co.jp/tv/precure/
>

・ハイスクール奇面組
< http://www.j-comi.jp/book/comic/44401
>

・Dart例文辞典
< http://www.openspc2.org/reibun/Dart/ver1.1/
>

・Adobe CS2〜CS6,CC JavaScriptリファレンス&ライブラリ
< http://www.openspc2.org/reibun/AdobeJS/index.html
>

・Adobe JavaScriptリファレンス(検索できないのはKindleのバグらしい)
< http://www.amazon.co.jp/dp/4844395955
>

・ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/
>

・Nexus 7(アンドロイドタブレット)使い方辞典
< http://www.openspc2.org/reibun/Android/Nexus7/
>

・JavaScript逆引きハンドブック
< http://www.amazon.co.jp/dp/4863541082
>

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/
>

・Adobe Illustrator CS3 + JavaScript 自動化サンプル集
< http://www.openspc2.org/book/PDF/Adobe_Illustrator_CS3_JavaScript_Book/
>
吉田印刷所の「印刷の泉」でも購入できるようになりました。