// レイヤー構造を調べて出力 //----------------2005.05.22 新瀬 進(http://www016.upp.so-net.ne.jp/sorakaze/) // 環境設定=================================================================== var mode = "DEEP"; /* TEXT|NORMAL|DEEP */ var endAlert = false; var jLayerKind = new Array(); jLayerKind["LayerKind.BRIGHTNESSCONTRAST"] = "調整レイヤー/明るさ・コントラスト"; jLayerKind["LayerKind.CHANNELMIXER"] = "調整レイヤー/チャンネルミキサー"; jLayerKind["LayerKind.COLORBALANCE"] = "調整レイヤー/カラーバランス"; jLayerKind["LayerKind.CURVES"] = "調整レイヤー/トーンカーブ"; jLayerKind["LayerKind.GRADIENTFILL"] = "調整レイヤー/グラデーション"; jLayerKind["LayerKind.GRADIENTMAP"] = "調整レイヤー/グラデーションマップ"; jLayerKind["LayerKind.HUESATURATION"] = "調整レイヤー/色相・彩度"; jLayerKind["LayerKind.INVERSION"] = "調整レイヤー/階調の反転"; jLayerKind["LayerKind.LEVELS"] = "調整レイヤー/レベル補正"; jLayerKind["LayerKind.NORMAL"] = ""; jLayerKind["LayerKind.PATTERNFILL"] = "調整レイヤー/パターン"; jLayerKind["LayerKind.POSTERIZE"] = "調整レイヤー/ポスタライズ"; jLayerKind["LayerKind.SELECTIVECOLOR"] = "調整レイヤー/特定色域の選択"; jLayerKind["LayerKind.SOLIDFILL"] = "調整レイヤー/べた塗り"; jLayerKind["LayerKind.TEXT"] = "テキスト"; jLayerKind["LayerKind.THRESHOLD"] = "調整レイヤー/2値化"; jLayerKind["LayerKind.UNKNOWN"] = "未知の形式"; /* ERR */ var jBlendMode = new Array(); jBlendMode["BlendMode.COLORBLEND"] = "カラー"; jBlendMode["BlendMode.COLORBURN"] = "焼き込みカラー"; jBlendMode["BlendMode.COLORDODGE"] = "覆い焼きカラー"; jBlendMode["BlendMode.DARKEN"] = "比較(暗)"; jBlendMode["BlendMode.DIFFERENCE"] = "差の絶対値"; jBlendMode["BlendMode.DISSOLVE"] = "ディザ合成"; jBlendMode["BlendMode.EXCLUSION"] = "除外"; jBlendMode["BlendMode.HARDLIGHT"] = "ハードライト"; jBlendMode["BlendMode.HUE"] = "色相"; jBlendMode["BlendMode.LIGHTEN"] = "比較(明)"; jBlendMode["BlendMode.LINEARBURN"] = "焼き込み(リニア)"; jBlendMode["BlendMode.LINEARDODGE"] = "覆い焼き(リニア)"; jBlendMode["BlendMode.LINEARLIGHT"] = "リニアライト"; jBlendMode["BlendMode.LUMINOSITY"] = "輝度"; jBlendMode["BlendMode.MULTIPLY"] = "乗算"; jBlendMode["BlendMode.NORMAL"] = "通常"; jBlendMode["BlendMode.OVERLAY"] = "オーバーレイ"; jBlendMode["BlendMode.PASSTHROUGH"] = "通過"; jBlendMode["BlendMode.PINLIGHT"] = "ピンライト"; jBlendMode["BlendMode.SATURATION"] = "彩度"; jBlendMode["BlendMode.SCREEN"] = "スクリーン"; jBlendMode["BlendMode.SOFTLIGHT"] = "ソフトライト"; jBlendMode["BlendMode.VIVIDLIGHT"] = "ビビッドライト"; jBlendMode["BlendMode.UNKNOWN"] = "未知の形式"; /* ERR */ // メイン===================================================================== if(documents.length == 0){ alert("解析する画像を開いて実行してください"); }else{ var layerCount = 0; var tmpResource = outPutResource(activeDocument.layers, ""); var srcFileName = activeDocument.fullName.fsName.toString(); textWrite(tmpResource, layerCount, srcFileName); if(endAlert){ alert('Ok'); } } // =========================================================================== // レイヤー数だけ処理========================================================= function outPutResource(srcLayers, tabs){ var resourceString = ""; for(var loop=0; loop>\n'; } return resourceString; } // レイヤータイプ毎の設定を出力(詳細)======================================= function layerInfoDeep(srcLayer, tabs){ var kind = getLayerKind(srcLayer); var resourceString = ""; if(kind){ /* Layer */ resourceString += tabs; resourceString += srcLayer.grouped ? '↓' : ''; resourceString += srcLayer.name + layerStatus(srcLayer); if(kind == LayerKind.TEXT){ resourceString += "\t" + getTextString(srcLayer); } resourceString += "\n"; }else{ /* LayerSet */ resourceString += tabs + '<< ' + srcLayer.name; resourceString += layerStatus(srcLayer) + "\n"; resourceString += outPutResource(srcLayer.layers, tabs + "\t"); resourceString += tabs + ">>\n"; } return resourceString; } // レイヤーの状態を出力======================================================= function layerStatus(srcLayer){ var kind = getLayerKind(srcLayer); var subStr = '('; if(srcLayer.isBackgroundLayer){ /* 背景レイヤー */ subStr += '背景:'; }else if(kind){ /* 通常レイヤー */ subStr += jLayerKind[String(kind)] + ':'; }else{ /* レイヤーセット */ subStr += 'レイヤーセット:'; } subStr += jBlendMode[String(getBlendMode(srcLayer))] + ':'; subStr += String(Math.floor(srcLayer.opacity)) + ':'; subStr += kind ? String(Math.floor(srcLayer.fillOpacity)) : ''; subStr += ':' subStr += srcLayer.visible ? '@' : '_'; subStr += ')' return subStr; } // レイヤーの種類を取得======================================================= function getLayerKind(srcLayer){ var kind; try{ kind = srcLayer.kind; } catch(e){ kind = "LayerKind.UNKNOWN"; } return kind; } // ブレンドモードを取得======================================================= function getBlendMode(srcLayer){ var bm; try{ bm = srcLayer.blendMode; } catch(e){ bm = "BlendMode.UNKNOWN"; } return bm; } // テキストレイヤーから内容を出力============================================= function getTextString(textLayer){ return '"' + textLayer.textItem.contents.replace(/\r/g, "\\n") + '"'; } // テキストファイルへ出力===================================================== function textWrite(resourceStr,layerSum, fileName){ var outputFile = new File(fileName.replace(/\.psd$/i, '') + '.txt'); outputFile.open("w"); outputFile.write("解析画像 : "+ fileName + "\n"); outputFile.write("レイヤー数: "+ layerSum + "\n\n"); outputFile.write(resourceStr); outputFile.close(); }