///// GLOBAL SETTINGS ///// preferences.rulerUnits = Units.PIXELS; // 単位をピクセルに var document = activeDocument; var result = []; var baseURL = document.path+"/"; var currentFolder = ""; var LIMIT = 200; var count = 0; ///// USER SETTINGS ///// var useFolder = false; var TYPE_JPEG = "JPEG"; var TYPE_PNG = "PNG"; var saveFileFlag = true; var saveFileType = TYPE_PNG; var pngBit = 24; var jpegQuality = 100; var saveAsPSD = false; ///// RUN ///// main(); ///// MAIN METHODS ///// function main(){ setVisible(document.layers, false); if( !useFolder ) { baseURL += getNameRemovedExtendType(document); _createFolder(baseURL); } outputLayers(document.layers, null ); setVisible(document.layers, true); result.push("complete!"); report(); } ///// UTILITY METHODS ///// // 拡張子を除去 function getNameRemovedExtendType(doc) { var nameParts = String(doc.name).split("."); var name = nameParts.splice(0, nameParts.length-1).join("."); return name; } function getValidName(name){ name = name.replace(/\/$/,""); return name.replace(/[\/\:\;\.\,\@\"\'\\]/g,"_"); } // ログ出力 function report(){ alert( result.join("\n") ); } ///// OUTPUT LAYER METHODS ///// // メイン処理レイヤーリスト function outputLayers(layers, folder){ if( !!folder ) createFolder( folder ); for( var i=0, l=layers.length; iLIMIT ) return; clippingLayer(layer); } } } // メイン処理レイヤー function clippingLayer(obj){ //書き出し準備 //setVisible(document.layers, false); setVisible(obj, true); //レイヤーの画像範囲を取得 var boundsObj = obj.bounds; x1 = parseInt(boundsObj[0])-1; y1 = parseInt(boundsObj[1])-1; x2 = parseInt(boundsObj[2])+1; y2 = parseInt(boundsObj[3])+1;  //指定範囲を選択 selectReg = [[x1,y1],[x2,y1],[x2,y2],[x1,y2]]; activeDocument.selection.select(selectReg); try { //選択範囲を結合してコピー activeDocument.selection.copy(true); //選択を解除 activeDocument.selection.deselect(); //新規ドキュメントを作成 var width = x2 - x1; var height = y2 - y1; var resolution = 72; var name = getValidName(obj.name); var mode = NewDocumentMode.RGB; var initialFill = DocumentFill.TRANSPARENT; preferences.rulerUnits = Units.PIXELS; newDocument = documents.add(width, height, resolution, name, mode, initialFill); //画像をペースト newDocument.paste(); //新規レイヤーの画像範囲を取得 var newBoundsObj = newDocument.activeLayer.bounds; nx1 = parseInt(newBoundsObj[0])-1; ny1 = parseInt(newBoundsObj[1])-1; nx2 = parseInt(newBoundsObj[2])+1; ny2 = parseInt(newBoundsObj[3])+1; //空白がある場合は切り抜き if((nx2 - nx1) != (x2 - x1) || (ny2 - ny1) != (y2 - y1)){ newDocument.crop(newBoundsObj); } //ファイルに書き出し //* if(saveFileFlag == true){ switch(saveFileType){ case TYPE_PNG: savePNG( currentFolder, name, pngBit ); break; case TYPE_JPEG: saveJPEG( currentFolder, name, jpegQuality ); break; } } //*/ if( saveAsPSD ) { newDocument.close( SaveOptions.SAVECHANGES ); } else { newDocument.close( SaveOptions.DONOTSAVECHANGES ); } //successList.push(obj); } catch(e){ //選択範囲に何も含まれていない場合 //errorList.push(obj); result.push( obj.name+": "+e.message); } finally{ //元のドキュメントをアクティブに設定 activeDocument = document; setVisible(obj, false); } } //フォルダ作成処理 function createFolder( folderName ) { currentFolder += getValidName(folderName)+"/"; if( !useFolder ) return true; _createFolder(baseURL+currentFolder); } function _createFolder(url) { var folder = new Folder(url); if( folder.exists ) { return false; } else { folder.create(); return true; } } ///// VISIBILITY LAYER METHODS ///// // レイヤー表示処理 function setVisible(obj, bool){ var i=0, l; switch( obj.typename ) { //case "LayerSets": case "Layers": for( l=obj.length; i