Skip to content

Instantly share code, notes, and snippets.

@s2kw
Last active February 2, 2022 05:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save s2kw/b5c5d648a4a376b29e138f2bce8bd62a to your computer and use it in GitHub Desktop.
Save s2kw/b5c5d648a4a376b29e138f2bce8bd62a to your computer and use it in GitHub Desktop.
Photoshopの選択中のレイヤーの位置とサイズ情報(Bounds)をJSONで出力する
#include json2.jsx;
// ↑のファイルをPhotoshopディレクトリ下に置こうね
function main(){
// 現在選択中のレイヤを取得
var target = app.activeDocument.activeLayer;
if(target == null) {
alert("レイヤーが選択されていません");
return;
}
// レイヤー情報からJSONへ変更
var obj = CreateByLayer(target);
if(!obj) {
alert("選択したレイヤーが不正です");
return;
}
var json = obj.JSONText();
dialog(json);
}
main();
function dialog( text ){
var w = new Window('dialog',"選択したレイヤーのJSON情報");
w.bounds = [300, 200, 1200, 600];
w.add("statictext", {width:300, height:25, x:10, y:200 }, "調整を終えたら↓のテキストをスプレへコピーしてください",{closeButton:true});
var resultValueText = w.add("edittext", {width:300, height:25, x:0, y:280 }, text);
w.show();
}
function CreateByLayer( layer ){
var o = new Object();
var currentBounds = layer.bounds;
o.x = currentBounds[0].as('px');
o.y = currentBounds[1].as('px');
o.width = currentBounds[2].as('px') - currentBounds[0].as('px');
o.height = currentBounds[3].as('px') - currentBounds[1].as('px');
o = AddFunctions(o);
return o;
};
function AddFunctions(o){
// JSON形式で出力
o.JSONText = function(){
return "{\"x\":"+o.x+",\"y\":"+o.y+",\"width\":"+o.width+",\"height\":"+o.height+"}";
};
o.JSONObj = function(){
return JSON.parse( RemoveSpecificCharacterFromJSON( o.JSONText() ));
};
o.Bounds = function(){
return "[" + o.x + "," + o.y + "," + o.width + "," + o.height + "]";
};
o.IsJustFit = function(layer){
var layerObj = CreateByLayer(layer);
if (o.x != layerObj.x) return false;
if (o.y != layerObj.y) return false;
if (o.width != layerObj.width) return false;
if (o.height != layerObj.height) return false;
return true;
}
o.ApplyToLayer = function(layer){
var layerObj = CreateByLayer(layer);
// alert( "currentLayer:" + layerObj.JSONText());
// alert("layerObj.width / obj.width::" + layerObj.width + " / " + obj.width);
var scaleX = ( parseFloat(o.width) / parseFloat(layerObj.width)) * 100;
// 高さ
// alert("layerObj.height / obj.height::" +layerObj.height + "/" + obj.height);
var scaleY = (parseFloat(o.height) / parseFloat(layerObj.height)) * 100;
// alert("scaleX:"+scaleX + " scaleY:"+scaleY);
var deltaX = (o.x - layerObj.x) +'px';
var deltaY = (o.y - layerObj.y) +'px';
// alert(deltaX + ":" + deltaY);
// スケール
layer.resize(scaleX, scaleY, AnchorPosition.MIDDLECENTER);
layer.translate( deltaX, deltaY);
// 結果
// alert( "delta:" + deltaX + ":" + deltaY + "\n,,,," + o.JSONText() +" => "+ CreateByLayer(layer).JSONText());
// フィットするまで再帰
// if( !o.IsJustFit(layer) )o.ApplyToLayer(layer);
};
return o;
};
function RemoveSpecificCharacterFromJSON(jsonString){
var s = jsonString.replace(/\\n/g, "\\n")
.replace(/\\'/g, "\\'")
.replace(/\\"/g, '\\"')
.replace(/\\&/g, "\\&")
.replace(/\\r/g, "\\r")
.replace(/\\t/g, "\\t")
.replace(/\\b/g, "\\b")
.replace(/\\f/g, "\\f");
s = s.replace(/[\u0000-\u0019]+/g,"");
return s;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment