// レイヤー名で設定を変えて2値化 Version 3 //----------------2004.12.27 新瀬 進(http://www016.upp.so-net.ne.jp/sorakaze/) // 環境設定を変更============================================================= var strtRulerUnits = preferences.rulerUnits; // 単位をピクセルに設定 if(strtRulerUnits != Units.PIXELS){ preferences.rulerUnits = Units.PIXELS; } var strtHistory = preferences.numberOfHistoryStates; // ヒストリ保存数を設定 if(strtHistory < 13){ preferences.numberOfHistoryStates = 13; } var strtDisplayDialogs = displayDialogs; displayDialogs = DialogModes.NO; // BitmapConversionOptionsのプロパティを追加---------------------------------- BitmapConversionOptions.prototype.whiteTone = false; BitmapConversionOptions.prototype.shiftH = 0; BitmapConversionOptions.prototype.shiftV = 0; // 初期設定=================================================================== var epsOrgPath = "\\eps"; var tmpOrgPath = "\\tmp"; var openList = "設定ファイル:*.txt;*.cfg;*.ini, 全てのファイル形式:*"; function initCommon(){ var configPath = "~\\Photoshop Scripting Temp"; var configFolder = new Folder(configPath); if(!configFolder.exists){ configFolder.create(); } var tPrm = new Array(); tPrm["toneSetName"] = "toneset.txt"; // トーン設定ファイル tPrm["cfg"] = configPath + "\\ToneCommon.cfg"; return tPrm; } function initParam(){ var configPath = "~\\Photoshop Scripting Temp"; var rPrm = new Array(); rPrm["srcPath"] = ""; rPrm["tmpPath"] = ""; rPrm["epsPath"] = ""; rPrm["fixMode"] = false; rPrm["Output"] = false; rPrm["outAuto"] = true; rPrm["tmpFile"] = false; rPrm["tmpAuto"] = true; rPrm["fileClose"] = false; rPrm["endAlert"] = false; rPrm["cfg"] = configPath + "\\BitmapConversion.cfg"; rPrm["left"] = 0; rPrm["top"] = 0; rPrm["center"] = true; return rPrm; } var endMessage = "2値化処理終了"; var White = new SolidColor(); // 白設定 White.gray.gray = 0; var Black = new SolidColor(); // 黒設定 Black.gray.gray = 100; // メイン===================================================================== var t = loadPreference( initCommon() ); var p = loadPreference( initParam() ); var toneFile = new File(t["toneSetName"]); if(!toneFile.exists){ selectToneFile(); } var bcDlg = new createDialog_DLG(p); initializeDLG(bcDlg); if(runDialog(bcDlg)){ changePreference(bcDlg, p); savePreference(t); savePreference(p); if(!p["fixMode"] && documents.length == 0){ alert("処理対象の画像を開いてから実行してください"); }else{ var scrDefOpt = makeScrDefOption(); var docDefOpt = copyOption(scrDefOpt); var optSet = makeOptionSet(p); if(optSet){ BMC_main(); } else{ alert("トーン設定が読み込めませんでした"); } } } // 環境設定を戻す============================================================= displayDialogs = strtDisplayDialogs; preferences.numberOfHistoryStates = strtHistory; preferences.rulerUnits = strtRulerUnits; // =========================================================================== // =========================================================================== // 本処理===================================================================== function BMC_main(){ if(p["fixMode"]){ var basePath = p["srcPath"]; } if(p["tmpFile"]){ // 中間ファイル用フォルダを準備 var tmpSavePath = p["tmpPath"]; var tmpFolderPath = new Folder( tmpSavePath ); if(!tmpFolderPath.exists){ tmpFolderPath.create(); } } if(p["Output"] || p["fixMode"]){ // 出力EPSファイル用フォルダを準備 var epsSavePath = p["epsPath"]; var epsFolderPath = new Folder( epsSavePath ); if(!epsFolderPath.exists){ epsFolderPath.create(); } } // --------------------------------------------------------------------------- var fileLoop, numberOfFiles, srcDoc, srcFile; if(p["fixMode"]){ var srcFolder = new Folder(basePath); // 対象フォルダ var srcFiles = srcFolder.getFiles("*.psd"); // 処理ファイルを取得 numberOfFiles = srcFiles.length; if(!numberOfFiles){ alert("処理対象ファイルがありません"); } }else{ numberOfFiles = 1; } for(fileLoop=0; fileLoop 0){ for(loop=srcDoc.layerSets.length-1;loop>=0;loop--){ if(srcDoc.layerSets[loop].layers.length > 0 && srcDoc.layerSets[loop].visible){ preferences.numberOfHistoryStates++; srcDoc.layerSets[loop].merge(); } } } srcDoc.activeLayer.visible = layerVisible; // 最大解像度を調べる--------------------------------------------------------- var maxResolution = 0; for(loop=srcDoc.artLayers.length-1; loop>=0; loop--){ layerName = srcDoc.artLayers[loop].name; // レイヤー名 toneOpt = makeOption(layerName, docDefOpt); if(toneOpt.resolution > maxResolution){ maxResolution = toneOpt.resolution; // 最大解像度を設定 } } // 全レイヤーを非表示に------------------------------------------------------- var visibleOrg = invisibleAll(srcDoc); srcDoc.selection.deselect(); // 選択解除(ヒストリ位置設定のための処理) var before = srcDoc.activeHistoryState; // 元に戻すためのヒストリ保存 // 新規画像(2値化処理後保存用)作成----------------------------------------- srcDoc.flatten(); // 画像を統合 toneOpt = copyOption(docDefOpt); toneOpt.resolution = maxResolution; srcDoc.changeMode(ChangeMode.BITMAP, toneOpt); // 最大解像度で2値化 var maxWidth = srcDoc.width; var maxHeight = srcDoc.height; var newDoc = documents.add(maxWidth, maxHeight, maxResolution, "new", NewDocumentMode.GRAYSCALE); activeDocument = srcDoc; srcDoc.activeHistoryState = before; // 画像統合前に戻す // 各レイヤー毎に2値化------------------------------------------------------- for(loop=srcDoc.artLayers.length-1; loop>=0; loop--){ if(visibleOrg[loop]){ // 非表示レイヤーは飛ばす bgFlag = srcDoc.artLayers[loop].isBackgroundLayer; // 背景レイヤー判定 layerName = srcDoc.artLayers[loop].name; // レイヤー名 toneOpt = makeOption(layerName, docDefOpt); if(!bgFlag){ // 背景以外での処理 srcDoc.artLayers.add(); if(toneOpt.whiteTone){ // ホワイトトーン処理の場合背景は黒 srcDoc.selection.fill(Black, ColorBlendMode.NORMAL, 100, false); }else{ srcDoc.selection.fill(White, ColorBlendMode.NORMAL, 100, false); } srcDoc.activeLayer.moveAfter(srcDoc.artLayers[loop + 1]); } srcDoc.activeLayer = srcDoc.artLayers[loop]; srcDoc.activeLayer.visible = true; if(toneOpt.shiftH || toneOpt.shiftV){ // シフト処理 pxH = Cast(srcDoc.resolution * toneOpt.shiftH); pxV = Cast(srcDoc.resolution * toneOpt.shiftV); srcDoc.activeLayer.translate(-pxH, -pxV); } srcDoc.flatten(); // 画像を統合 if(toneOpt.method != BitmapConversionType.CUSTOMPATTERN){ srcDoc.changeMode(ChangeMode.BITMAP, toneOpt); // 2値化 }else{ changeCustom(toneOpt); // カスタムパターン回避用の2値化処理 } if(toneOpt.resolution != maxResolution){ srcDoc.resizeImage(maxWidth, maxHeight, maxResolution, ResampleMethod.NEARESTNEIGHBOR); // レイヤーの処理解像度が異なる場合は合わせる } srcDoc.activeLayer.copy(false); // 作成した画像をコピー activeDocument = newDoc; newDoc.paste(false); // ペースト if(bgFlag){ // 元が背景ならば統合 newDoc.flatten(); }else{ // それ以外はモードに合わせてレイヤーモードを変更 newDoc.activeLayer.name = layerName; if(toneOpt.whiteTone){ newDoc.activeLayer.blendMode = BlendMode.SCREEN; }else{ newDoc.activeLayer.blendMode = BlendMode.MULTIPLY; } if(toneOpt.shiftH || toneOpt.shiftV){ // アンシフト処理 pxH = Cast(newDoc.resolution * toneOpt.shiftH); pxV = Cast(newDoc.resolution * toneOpt.shiftV); newDoc.activeLayer.translate(pxH, pxV); } } activeDocument = srcDoc; srcDoc.activeHistoryState = before; // 2値化処理前の状態に戻す } } srcDoc.activeHistoryState = beforeAll; // 2値化画像保存------------------------------------------------------------- var saveName, newFile; activeDocument = newDoc; var srcName = srcDoc.fullName.fsName.toString(); srcName = srcName.replace(srcDoc.path.fsName.toString(), ""); if(p["tmpFile"]){ // 統合前の中間ファイルを保存 var psdOpt = makePSDOption(); saveName = tmpSavePath + srcName.replace(/\.psd/i,""); newFile = new File( saveName ); newDoc.saveAs( newFile, psdOpt, false, Extension.LOWERCASE ); } if(p["Output"] || p["fixMode"]){ // 出力用EPSファイルを保存 var epsOpt = makeEPSOption(); newDoc.flatten(); toneOpt = copyOption(docDefOpt); toneOpt.method = BitmapConversionType.HALFTHRESHOLD; toneOpt.resolution = maxResolution; newDoc.changeMode(ChangeMode.BITMAP, toneOpt); saveName = epsSavePath + srcName.replace(/\.psd/i,""); newFile = new File( saveName ); newDoc.saveAs( newFile, epsOpt, false, Extension.LOWERCASE ); } if(p["fixMode"] || p["fileClose"]){ // 連続動作の場合はファイルを閉じる srcDoc.close(SaveOptions.DONOTSAVECHANGES); newDoc.close(SaveOptions.DONOTSAVECHANGES); } } // 2値化設定(フォールバックリソース)======================================= function makeScrDefOption(){ var scrDef = new BitmapConversionOptions(); scrDef.resolution = 1200; // 出力解像度 scrDef.angle = 45; // ハーフトーン角度 scrDef.frequency = 175; // ハーフトーン線数 scrDef.patternName = ""; // カスタムパターン名 scrDef.method = BitmapConversionType.HALFTONESCREEN; // 2値化方法 scrDef.shape = BitmapHalfToneType.ROUND; // ハーフトーン形状 // BitmapConversionType. 2値化方法 // CUSTOMPATTERN カスタムパターン // DIFFUSIONDITHER 誤差拡散法(ディザ) // HALFTHRESHOLD 50%を基準に2階調に分ける // HALFTONESCREEN ハーフトーン // PATTERNDITHER パターンディザ // BitmapHalfToneType. ハーフトーン形状 // CROSS クロス // DIAMOND 菱形 // ELLIPSE 楕円 // LINE ライン // ROUND 円 // SQUARE 四角 scrDef.whiteTone = false; scrDef.shiftH = 0; scrDef.shiftV = 0; return scrDef; } // EPSSaveOptions============================================================= function makeEPSOption(){ // ※EPSの保存オプションは印刷所の指定に合わせて変更してください var tmpOpt = new EPSSaveOptions(); // EPS保存オプション tmpOpt.embedColorProfile = false; tmpOpt.encoding = SaveEncoding.BINARY; tmpOpt.halftoneScreen = false; tmpOpt.interpolation = false; tmpOpt.preview = Preview.MONOCHROMETIFF; //tmpOpt.preview = Preview.MACMONOCHROME; // MACの場合 tmpOpt.psColorManagement = false; tmpOpt.transferFunction = false; tmpOpt.transparentWhites = false; tmpOpt.vectorData = false; return tmpOpt; } // PSDSaveOptions============================================================= function makePSDOption(){ var tmpOpt = new PhotoshopSaveOptions(); // PSD保存オプション tmpOpt.alphaChannels = false; tmpOpt.annotations = false; tmpOpt.embedColorProfile = false; tmpOpt.layers = true; tmpOpt.spotColors = false; return tmpOpt; } // CASTバグ対策=============================================================== function Cast(number){ return number + activeDocument.width - activeDocument.width; } // 2値化設定のコピー========================================================= function copyOption(srcOpt){ var newOpt = new BitmapConversionOptions(); // 設定をコピー newOpt.resolution = srcOpt.resolution; newOpt.angle = srcOpt.angle; newOpt.frequency = srcOpt.frequency; newOpt.patternName = srcOpt.patternName; newOpt.method = srcOpt.method; newOpt.shape = srcOpt.shape; newOpt.whiteTone = srcOpt.whiteTone; newOpt.shiftH = srcOpt.shiftH; newOpt.shiftV = srcOpt.shiftV; return newOpt; } // 文字化け修正=============================================================== function charTrans(charStr){ var ctFile = new File("name.tmp"); ctFile.open("w"); ctFile.encoding = "BINARY"; ctFile.writeln(unescape(charStr)); ctFile.close(); ctFile.open("r"); ctFile.encoding = "UTF-8"; var ctStr = ctFile.readln(); ctFile.close(); return ctStr; } // 全レイヤーを不可視に======================================================= function invisibleAll(docRef){ var loop; var visible = new Array(); //元の表示状態保存配列 for(loop=0; loop 1){ value = comStr[1]; } // 値 switch(comName.toLowerCase()){ // 新しいオプションを設定 case "r": case "reso": if(value){ newOpt.resolution = Number(value); } break; case "a": case "angl": if(value){ newOpt.angle = Number(value); } break; case "f": case "freq": if(value){ newOpt.frequency = Number(value); } break; case "p": case "ptrn": if(value){ newOpt.patternName = value; } break; case "m": case "meth": switch(value.toUpperCase()){ case "C": newOpt.method = BitmapConversionType.CUSTOMPATTERN; break; case "D": newOpt.method = BitmapConversionType.DIFFUSIONDITHER; break; case "2": newOpt.method = BitmapConversionType.HALFTHRESHOLD; break; case "H": newOpt.method = BitmapConversionType.HALFTONESCREEN; break; case "P": newOpt.method = BitmapConversionType.PATTERNDITHER; break; } break; case "s": case "shap": switch(value.toUpperCase()){ case "C": newOpt.shape = BitmapHalfToneType.CROSS; break; case "D": newOpt.shape = BitmapHalfToneType.DIAMOND; break; case "E": newOpt.shape = BitmapHalfToneType.ELLIPSE; break; case "L": newOpt.shape = BitmapHalfToneType.LINE; break; case "R": newOpt.shape = BitmapHalfToneType.ROUND; break; case "S": newOpt.shape = BitmapHalfToneType.SQUARE; break; } break; case "w": case "white": newOpt.whiteTone = true; break; case "h": case "hori": if(value){ newOpt.shiftH = Number(value); } break; case "v": case "vert": if(value){ newOpt.shiftV = Number(value); } break; default: if(optSet[comName]){ newOpt = copyOption(optSet[comName]); } break; } } return newOpt; } // トーン設定ファイル読み込み================================================= function makeOptionSet(rPrm){ var inputFile = new File(t["toneSetName"]); if(!inputFile.exists){ return false; } var str,modeStr,setStr; var optSet = new Array(); var section = "DEFAULT"; inputFile.open("r"); while(true){ str = inputFile.readln(); str = str.replace(/;.+/, ""); // コメントを消去 str = str.replace(/ \t/g, ""); // 不要文字を消去 if(inputFile.eof){ break; } // ファイル読み込み終了 if(str == "" ){ continue; } // 空行は無視 if(str.match(/\[.+\]/)){ // セクション str = str.replace(/\[/, ""); str = str.replace(/\]/, ""); section = str; } switch(section.toUpperCase()){ // セクション動作 case "TONE": if(str.match(/def\(.+\)/i)){ // デフォルト設定 str = str.replace(/def\(/i, ""); str = str.replace(/\)/, ""); docDefOpt = makeOption(str, scrDefOpt); } if(str.match(/set".+"\(.+\)/i)){ // 設定セット setStr = str.split('"'); setStr[2] = setStr[2].replace(/\(/, ""); setStr[2] = setStr[2].replace(/\)/, ""); optSet[setStr[1]] = makeOption(setStr[2], docDefOpt); } break; } } inputFile.close(); return optSet; } // =========================================================================== // =========================================================================== // 設定ダイアログ============================================================= function createDialog_DLG(){ var dialogResource = "dialog { text:'トーン化処理', bounds:[0, 0, 400, 346], " dialogResource += " build: Button { text:'実行', bounds:[300, 306, 384, 330], }, " dialogResource += " cancel: Button { text:'キャンセル', bounds:[200, 306, 284, 330], }, " dialogResource += " endalert: Checkbox { text:'処理終了後ダイアログを表示', bounds:[16, 317, 177, 330], }, " dialogResource += " fileclose: Checkbox { text:'処理終了後ファイルを閉じる', bounds:[16, 297, 172, 310], }, " dialogResource += " tmppnl: Panel { text:'', bounds:[15, 218, 385, 285], " dialogResource += " str: StaticText { text:'保存先フォルダを指定してください。', bounds:[22, 20, 187, 31], }, " dialogResource += " dstdir: EditText { bounds:[21, 35, 305, 53], }, " dialogResource += " browse: Button { text:'参照', bounds:[305, 35, 349, 53], }, " dialogResource += " tmpfile: Checkbox { text:'中間ファイル保存', bounds:[0, 0, 105, 13], }, " dialogResource += " auto: Checkbox { text:'自動設定', bounds:[283, 14, 354, 27], }, " dialogResource += " }," dialogResource += " outpnl: Panel { text:'', bounds:[15, 138, 385, 205], " dialogResource += " str: StaticText { text:'保存先フォルダを指定してください。', bounds:[22, 20, 187, 31], }, " dialogResource += " dstdir: EditText { bounds:[21, 35, 305, 53], }, " dialogResource += " browse: Button { text:'参照', bounds:[305, 35, 349, 53], }, " dialogResource += " output: Checkbox { text:'EPSファイル保存', bounds:[0, 0, 102, 13], }, " dialogResource += " auto: Checkbox { text:'自動設定', bounds:[283, 14, 354, 27], }, " dialogResource += " }," dialogResource += " fixpnl: Panel { text:'', bounds:[15, 58, 385, 125], " dialogResource += " str: StaticText { text:'対象フォルダを指定してください。', bounds:[22, 20, 175, 31], }, " dialogResource += " srcdir: EditText { bounds:[21, 35, 305, 53], }, " dialogResource += " browse: Button { text:'参照', bounds:[305, 35, 349, 53], }, " dialogResource += " getdir: Button { text:'画像から取得', bounds:[265, 11, 349, 29], }, " dialogResource += " fixmode: Checkbox { text:'一括処理', bounds:[0, 0, 71, 13], }, " dialogResource += " }," dialogResource += " tonefile: Button { text:'変更', bounds:[341, 24, 385, 42], }, " dialogResource += " tonename: EditText { bounds:[15, 24, 341, 42], properties: { readonly:true } }, " dialogResource += " str: StaticText { text:'トーンファイル', bounds:[17, 9, 81, 20], }, " dialogResource += " }"; var dlg = new Window( dialogResource ); var x = Number(p["left"]); var y = Number(p["top"]); dlg.bounds[0] += x; dlg.bounds[1] += y; dlg.bounds[2] += x; dlg.bounds[3] += y; dlg.tonename.text = t["toneSetName"]; dlg.fixpnl.fixmode.value = p["fixMode"]; dlg.fixpnl.srcdir.text = p["srcPath"]; dlg.outpnl.output.value = p["Output"]; dlg.outpnl.auto.value = p["outAuto"]; dlg.outpnl.dstdir.text = p["epsPath"]; dlg.tmppnl.tmpfile.value = p["tmpFile"]; dlg.tmppnl.auto.value = p["tmpAuto"]; dlg.tmppnl.dstdir.text = p["tmpPath"]; dlg.fileclose.value = p["fileClose"]; dlg.endalert.value = p["endAlert"]; enableControl(dlg); if(p["center"]){ dlg.center(); } return dlg; } // 設定ダイアログ(ボタンを押したときなどの動作設定)========================= function initializeDLG(builder){ var path; with(builder){ fixpnl.fixmode.onClick = function(){ enableControl(this.parent.parent); outputAutoControl(this.parent.parent); tmpAutoControl(this.parent.parent); } fixpnl.browse.onClick = function(){ if(path = openSelectDialog(this.parent.parent, fixpnl.srcdir.text)){ fixpnl.srcdir.text = path; outputAutoControl(this.parent.parent); tmpAutoControl(this.parent.parent); } } fixpnl.srcdir.onChange = function(){ outputAutoControl(this.parent.parent); tmpAutoControl(this.parent.parent); cancel.active = true; build.active = true; cancel.active = false; build.active = false; } fixpnl.getdir.onClick = function(){ fixpnl.srcdir.text = activeDocument.path.fsName.toString(); outputAutoControl(this.parent.parent); tmpAutoControl(this.parent.parent); } outpnl.auto.onClick = function(){ enableControl(this.parent.parent); outputAutoControl(this.parent.parent); } outpnl.output.onClick = function(){ enableControl(this.parent.parent); outputAutoControl(this.parent.parent); } outpnl.browse.onClick = function(){ if(path = openSelectDialog(this.parent.parent, outpnl.dstdir.text)){ outpnl.dstdir.text = path; } } outpnl.dstdir.onChange = function(){ cancel.active = true; build.active = true; cancel.active = false; build.active = false; } tmppnl.tmpfile.onClick = function(){ enableControl(this.parent.parent); tmpAutoControl(this.parent.parent); } tmppnl.auto.onClick = function(){ enableControl(this.parent.parent); tmpAutoControl(this.parent.parent); } tmppnl.browse.onClick = function(){ if(path = openSelectDialog(this.parent.parent, tmppnl.dstdir.text)){ tmppnl.dstdir.text = path; } } tmppnl.dstdir.onChange = function(){ cancel.active = true; build.active = true; cancel.active = false; build.active = false; } tonefile.onClick = function(){ cancel.active = false; build.active = false; if(selectToneFile()){ this.parent.tonename.text = t["toneSetName"]; } cancel.active = true; build.active = true; } cancel.onClick = function(){ this.parent.close( false ); } build.onClick = function(){ if(closeCheck(this.parent)){ this.parent.close( true ); } } } } // ダイアログ(状態操作)===================================================== function enableControl(dialog){ with(dialog){ fixpnl.str.enabled = fixpnl.fixmode.value; fixpnl.srcdir.enabled = fixpnl.fixmode.value; fixpnl.browse.enabled = fixpnl.fixmode.value; fixpnl.getdir.enabled = fixpnl.fixmode.value && documents.length; outpnl.output.enabled = !fixpnl.fixmode.value; outpnl.str.enabled = fixpnl.fixmode.value || outpnl.output.value; outpnl.dstdir.enabled = fixpnl.fixmode.value || outpnl.output.value; outpnl.browse.enabled = (fixpnl.fixmode.value || outpnl.output.value) && !(outpnl.auto.value && (documents.length || fixpnl.fixmode.value)); outpnl.auto.enabled = fixpnl.fixmode.value || (outpnl.output.value && documents.length); tmppnl.str.enabled = tmppnl.tmpfile.value; tmppnl.dstdir.enabled = tmppnl.tmpfile.value; tmppnl.browse.enabled = tmppnl.tmpfile.value && !(tmppnl.auto.value && (documents.length || fixpnl.fixmode.value)); tmppnl.auto.enabled = tmppnl.tmpfile.value && (fixpnl.fixmode.value || documents.length); fileclose.enabled = !fixpnl.fixmode.value && (outpnl.output.value || tmppnl.tmpfile.value); endalert.enabled = fixpnl.fixmode.value; } } // ダイアログ(自動入力操作)================================================= function outputAutoControl(dialog){ with(dialog){ var localPath = fixpnl.srcdir.text.replace(/[\\\/]$/,""); if(!fixpnl.fixmode.value){ localPath = activeDocument.path.fsName.toString(); } if(outpnl.dstdir.enabled && outpnl.auto.value){ outpnl.dstdir.text = localPath + epsOrgPath; } } } // ダイアログ(自動入力操作)================================================= function tmpAutoControl(dialog){ with(dialog){ var localPath = fixpnl.srcdir.text.replace(/[\\\/]$/,""); if(!fixpnl.fixmode.value){ localPath = activeDocument.path.fsName.toString(); } if(tmppnl.dstdir.enabled && tmppnl.auto.value){ tmppnl.dstdir.text = localPath + tmpOrgPath; } } } // ダイアログ(フォルダセレクト)============================================= function openSelectDialog(dialog, openDir){ if(dialog.fixpnl.fixmode.value){ var testFolder = new Folder(openDir); openDir = testFolder.exists ? openDir : dialog.fixpnl.srcdir.text; testFolder = null; } dialog.active = false; dialog.enabled = false; var selFolder = Folder.selectDialog( "フォルダを選択してください", openDir ); dialog.enabled = true; dialog.active = true; if(selFolder != null){ return selFolder.fsName.toString(); } else{ return null; } } // ダイアログ(クローズチェック)============================================= function closeCheck(dialog){ with(dialog){ if(fixpnl.fixmode.value){ if(!fixpnl.srcdir.text){ dAlert(this, "対象フォルダが指定されていません"); return false; } } if(outpnl.output.value || fixpnl.fixmode.value){ if(!outpnl.dstdir.text){ dAlert(this, "EPSファイルの出力先フォルダが指定されていません"); return false; } } if(tmppnl.tmpfile.value){ if(tmppnl.dstdir.text){ if(tmppnl.dstdir.text.replace(/[\\\/]$/,"") == fixpnl.srcdir.text.replace(/[\\\/]$/,"")){ dAlert(this, "対象フォルダと中間ファイルの出力先が同じです"); return false; } }else{ dAlert(this, "中間ファイルの出力先フォルダが指定されていません"); return false; } } return true; } } // ダイアログ(アラートクローン)============================================= function dAlert(dialog,str){ with(dialog){ active = false; enabled = false; alert(str); enabled = true; active = true; } } // トーンファイル指定========================================================= function selectToneFile(){ if(t["toneSetName"]){ Folder.current = t["toneSetName"].replace(/\\[^\\]+$/, ''); } var selFile = File.openDialog( "トーンファイルを選択してください", openList ); if(selFile != null){ t["toneSetName"] = selFile.fsName.toString(); return true; }else{ return false; } } // ダイアログ(起動・実行)=================================================== function runDialog(dialog){ return dialog.show(); } // =========================================================================== // パラメータ(変更)========================================================= function changePreference(dialog){ p["srcPath"] = dialog.fixpnl.srcdir.text; p["tmpPath"] = dialog.tmppnl.dstdir.text; p["epsPath"] = dialog.outpnl.dstdir.text; p["fixMode"] = dialog.fixpnl.fixmode.value; p["Output"] = dialog.outpnl.output.value; p["outAuto"] = dialog.outpnl.auto.value; p["tmpFile"] = dialog.tmppnl.tmpfile.value; p["tmpAuto"] = dialog.tmppnl.auto.value; p["fileClose"] = dialog.fileclose.value; p["endAlert"] = dialog.endalert.value; p["left"] = dialog.bounds.left; p["top"] = dialog.bounds.top; p["center"] = "false"; } // パラメータ(ロード)======================================================= function loadPreference(prefer){ var str,preStr; var preferFile = new File(prefer["cfg"]); preferFile.open("r"); while(true){ str = preferFile.readln(); if(preferFile.eof){ break; } preStr = str.split('='); if(preStr[1] == "true"){ preStr[1] = true; } if(preStr[1] == "false"){ preStr[1] = false; } prefer[preStr[0]] = preStr[1]; } preferFile.close(); return prefer; } // パラメータ(セーブ)======================================================= function savePreference(prefer){ var key; var preferFile = new File(prefer["cfg"]); preferFile.open("w"); for(key in prefer){ preferFile.writeln( key + "=" + prefer[key]); } }