PhotoshopのパスをCSV形式に変換する (Photoshop CS〜CS4)

前回はPhotoshopのパスをKMLに変換しましたが、座標値をCSV形式(カンマ区切り)として利用したい場合もあります。CSV形式だとエクセルなどで処理することもできますし、何よりシンプルで扱いやすいというメリットがあります。また、Web上で使う場合、KMLでなくJSON/JSONP形式にしておいた方が便利な場合もあります。
以下のスクリプトは、アクティブになっているレイヤー(パスのあるレイヤー)のパスポイントの座標値をファイルに書き出します。なお、このスクリプトは前回同様地図をトレースした際に利用するものになっています。このため、キャンバス上のピクセル単位での座標値を取得したい場合には別のスクリプトを使う必要があります(可能なら以下のスクリプトを手直しして使ってください)。
上側の緯度、左側の経度に0を指定し、下側の緯度にキャンバスの高さ、右側の経度にキャンバスの横幅を指定して変換する方法もありますが、計算の都合上、パスポイント座標値に誤差が発生することがあります。

LF = String.fromCharCode(10);
docW = activeDocument.width.value;
docH = activeDocument.height.value;

function mapPathCSV(){
var pObj = activeDocument.pathItems[0];
var result = "";
var pp = pObj.subPathItems[0].pathPoints;
for(var i=0; i<pp.length; i++){
var x = pp[i].anchor[0];
var y = pp[i].anchor[1];
x = gLeft + (x / docW) * gDX;
y = gTop - (y / docH) * gDY;
result += x+","+y+ LF;
}
return result;
}
(function(){
var layObj = activeDocument.activeLayer;
if(layObj.kind != LayerKind.SOLIDFILL){
alert("パスで塗りつぶされたレイヤーを選択してから実行してください");
return;
}
gTop = prompt("上側の緯度を入れて下さい",0);
if (!gTop) return;
gBottom = prompt("下側の緯度を入れて下さい",0);
if (!gBottom) return;
gLeft = prompt("左側の経度を入れて下さい",0);
if (!gLeft) return;
gRight = prompt("右側の経度を入れて下さい",0);
if (!gRight) return;
gTop = parseFloat(gTop);
gBottom= parseFloat(gBottom);
gLeft= parseFloat(gLeft);
gRight= parseFloat(gRight);
gDX = gRight-gLeft;
gDY = gTop-gBottom;
var text = mapPathCSV();
var fileObj = File.saveDialog("保存ファイル名を入れて下さい");
if (fileObj){
var flag = fileObj.open("w");
if (flag == true){
fileObj.write(text);
fileObj.close();
alert("変換が終了しCSV形式でデータを保存しました");
}else{
alert("ファイルが作成できませんでした");
}
}
})();

[サンプルをダウンロード]