InDesignの画像枠に合わせてカンバスサイズを変更し、ガイドを引く


※デバッグ済んでません。

InDesignに貼り込まれていて、リンクが生きていること。
Photoshopで開いている画像に対して実行。InDesign中からリンクファイルを探して値を取得。
元の画像の辺位置にガイド、画像枠が食い込んでいるならそこにもガイドを引く
枠が画像より大きいなら、その分カンバスサイズを変更する。

InDesignリサイズスクリプトと併せて使う。

このスクリプトでは画像を削ることはしない。解像度も元のまま。

#更新履歴
2017/12/05）こっそりNumber追加
2017/11/06）すっごい間違えてた恥ずかしい（こっそりアップデート
2017/11/05）すっごい間違えてた恥ずかしい

#最新

```js:画像のばし.jsx
/*Photoshopでファイルを開いているか*/

if(app.documents.length){
        app.activeDocument.suspendHistory("画像伸ばし","yamomain()"); //あるなら実行
}

function yamomain(){//スコープの関係で全部mainに収まってる

/*InDesignで実行する関数の定義。戻りメッセージには！を入れ、判別に使う*/

var func=function (Key){
if(app.documents.length){
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
app.activeDocument.viewPreferences.rulerOrigin = RulerOrigin.SPREAD_ORIGIN;
var myLinks=app.activeDocument.links;
var myRT=[];
var arr=[];
var myLength = myLinks.length;
for (var i=0;i<myLength;i++){
    var mLink=File(myLinks[i].filePath);
    if (mLink==Key){　//同名リンクが存在
        if(myLinks[i].status==LinkStatus.normal){　//リンクステータスが正常
            arr.push(myLinks[i]);
            }else{
                return "！リンクが更新されていないため、正確な拡大率を取得できません。\rInDesignでリンクパネルを確認してください。";}
    }
}
//ソート。最大サイズが0に入る
if(arr.length!=0){
    arr.sort(function(a,b){
        if(a.parent.verticalScale>b.parent.verticalScale) return -1;
        if(a.parent.verticalScale<b.parent.verticalScale) return 1;
        return 0;
       });}else{　//アレイが空
            return "！この画像はInDesignドキュメント中に存在しません。";}
//四辺を調べ、食い込むならgをプラスしておく
var myItemI=arr[0].parent;
var myItemO=arr[0].parent.parent;
var myI,myO,myP;
var myPPI=myItemI.effectivePpi;
for(i=0;i<4;i++){
myI=myItemI.geometricBounds[i]; 
myO=myItemO.geometricBounds[i];
if(i==0 || i==2){
    myP=myPPI[1];
    }else{
    myP=myPPI[0];
    }
if(i==0 || i==1){
        if(myI-myO>0){
        myRT.push(Math.round(myP/25.4*(myI-myO)));
        }else{
        myRT.push("g"+Math.abs(Math.round(myP/25.4*(myI-myO))));
        }
    }else{
        if(myO-myI>0){
        myRT.push(Math.round(myP/25.4*(myO-myI)));
        }else{
        myRT.push("g"+Math.abs(Math.round(myP/25.4*(myO-myI))));
        }
    }
}    
        return myRT.join(","); //カンマ区切りで返す

        } else {return "！ドキュメントが開かれていません。";}
}

/*ここまでInDesignにBTで渡す用関数*/


/*単位保存*/

var myDoc = app.activeDocument;
var defRulerUnit=preferences.rulerUnits;
preferences.rulerUnits=Units.PIXELS;
var myGuide=myDoc.guides;
var myStr=[];
var myStrG=0;
var myW=myDoc.width.value;
var myH=myDoc.height.value;

/*BridgeTalk実行。ファイル名をURLエンコードしてInDesignに渡す*/

btFunc(File(myDoc.fullName)); 

/*戻り値を分けて実行*/
//alert(myRes);
if(myRes.match ("^.")=="！"){ //！で始まる戻り値はメッセージとする
alert(myRes);return;//戻りのメッセージ表示して終了
}else{ //メッセージが無ければ戻り値を利用して……
 /*まず加工しやすいようレイヤー化しておく*/
try{
myDoc.backgroundLayer.isBackgroundLayer = false;
}catch(e){};
var myMo=myRes.split(",");
activeDocument.guides.removeAll();

for(i=0;i<=3;i++){

if(myMo[i].match("^.")=="g"){ //配列先頭にgがあるならガイドを引く
    myStrG=Number(myMo[i].slice(1));
    myStr[i]=0;
    }else{
    myStr[i]=myMo[i];
    myStrG=0;
    }

    if(i>=2){
        if(i==2){
            myStrG=myH-myStrG;
        }else{
            myStrG=myW-myStrG;
        }
    }

    if(i==0 || i==2){
    myGuide.add(Direction.HORIZONTAL,myStrG);
    }else{
    myGuide.add(Direction.VERTICAL,myStrG);
    }
}

/*左下と右上基準で、二回カンバスサイズを変更する*/
myDoc.resizeCanvas (myW+parseInt(myStr[1]),myH+parseInt(myStr[0]),AnchorPosition.BOTTOMRIGHT);
myDoc.resizeCanvas (myW+parseInt(myStr[1])+parseInt(myStr[3]),myH+parseInt(myStr[0])+parseInt(myStr[2]),AnchorPosition.TOPLEFT);
}

/*残り処理。単位戻し*/
preferences.rulerUnits=defRulerUnit;

/*BridgeTalkでinDD呼び出し*/
//bt.target = apps[17];
function btFunc(arg){
var argObj="";
argObj="\""+arg+"\"";
var bt=new BridgeTalk();
bt.target="indesign";
bt.body = "var func="+func.toString();
bt.body += "func("+argObj+");";
bt.onResult = function(resObj) {
myRes=resObj.body;
}
bt.send(100000);
}
}
```

#まえの


```js:画像のばし.jsx
/*Photoshopでファイルを開いているか*/

if(app.documents.length){
        app.activeDocument.suspendHistory("画像リサイズ","main()"); //あるなら実行
}



function main(){//スコープの関係で全部mainに収まってる
    
/*InDesignで実行する関数の定義。戻りメッセージには！を入れ、判別に使う*/

var func=function (Key){
if(app.documents.length){
app.scriptPreferences.measurementUnit = MeasurementUnits.MILLIMETERS;
var myLinks=app.activeDocument.links;
var myItemI=myLinks[0].parent;
var myItemO=myLinks[0].parent.parent;
var myI,myO,myP
var myPPI=myItemI.effectivePpi;
var myRT=[];
var arr=[];
var myLength = myLinks.length;
for (var i=0;i<myLength;i++){
    var mLink=encodeURIComponent(myLinks[i].name)
    if (mLink==Key){　//同名リンクが存在
        if(myLinks[i].status==LinkStatus.normal){　//リンクステータスが正常
            arr.push(myLinks[i]);
            }else{
                return "！リンクが更新されていないため、正確な拡大率を取得できません。\rInDesignでリンクパネルを確認してください。";}
    }
}
/*ソート。最大サイズが0に入る*/
if(arr.length!=0){
    arr.sort(function(a,b){
        if(a.parent.verticalScale>b.parent.verticalScale) return -1;
        if(a.parent.verticalScale<b.parent.verticalScale) return 1;
        return 0;
       });}else{　//アレイが空
            return "！この画像はInDesignドキュメント中に存在しません。";}
/*四辺を調べ、食い込むならgをプラスしておく*/
for(i=0;i<4;i++){
myI=myItemI.geometricBounds[i];
myO=myItemO.geometricBounds[i];
if(i==0 || i==2){
    myP=myPPI[1];
    }else{
    myP=myPPI[0];
    }
if(i==0 || i==1){
        if(myI-myO>0){
        myRT.push(Math.round(myP/25.4*(myI-myO)));
        }else{
        myRT.push("g"+Math.abs(Math.round(myP/25.4*(myI-myO))));
        }
    }else{
        if(myO-myI>0){
        myRT.push(Math.round(myP/25.4*(myO-myI)));
        }else{
        myRT.push("g"+Math.abs(Math.round(myP/25.4*(myO-myI))));
        }
    }
}    
        return myRT.join(","); //カンマ区切りで返す
        
        } else {return "！ドキュメントが開かれていません。";}
}

/*ここまでInDesignにBTで渡す用関数*/


/*単位保存*/

var myDoc = app.activeDocument;
var defRulerUnit=preferences.rulerUnits;
var myGuide=myDoc.guides;
var myStr=[];
var myStrG=0;
var myW=myDoc.width.value;
var myH=myDoc.height.value;
/*BridgeTalk実行。ファイル名をURLエンコードしてInDesignに渡す*/

btFunc(combineDakuten (encodeURIComponent (myDoc.name))); 

/*戻り値を分けて実行*/

if(myRes.match ("^.")=="！"){ //！で始まる戻り値はメッセージとする
alert(myRes);return;//戻りのメッセージ表示して終了
}else{ //メッセージが無ければ戻り値を利用して……
 /*まず加工しやすいようレイヤー化しておく*/
try{
myDoc.backgroundLayer.isBackgroundLayer = false;
}catch(e){};
var myMo=myRes.split(",");

for(i=0;i<=3;i++){

if(myMo[i].match("^.")=="g"){ //配列先頭にgがあるならガイドを引く
    myStrG=myMo[i].slice(1);
    myStr[i]=0;
    }else{
    myStr[i]=myMo[i];
    myStrG=0;
    }
    
    if(i>=2){
        if(i==2){
            myStrG=myH-myStrG;
        }else{
            myStrG=myW-myStrG;
        }
    }

    if(i==0 || i==2){
    myGuide.add(Direction.HORIZONTAL,myStrG);
    }else{
    myGuide.add(Direction.VERTICAL,myStrG);
    }

}

/*左下と右上基準で、二回カンバスサイズを変更する*/
myDoc.resizeCanvas (myW+parseInt(myStr[1]),myH+parseInt(myStr[0]),AnchorPosition.BOTTOMRIGHT);
myDoc.resizeCanvas (myW+parseInt(myStr[1])+parseInt(myStr[3]),myH+parseInt(myStr[0])+parseInt(myStr[2]),AnchorPosition.TOPLEFT);

}

/*残り処理。単位戻し*/
preferences.rulerUnits=defRulerUnit;


/*BridgeTalkでinDD呼び出し*/
//bt.target = apps[17];
function btFunc(arg){
var argObj="";
argObj="\""+arg+"\"";
var bt=new BridgeTalk();
bt.target="indesign";
bt.body = "var func="+func.toString();
bt.body += "func("+argObj+");";
bt.onResult = function(resObj) {
myRes=resObj.body;
}
bt.send(100000);
}



/*以降の関数は、http://sttk3.com/blog/tips/illustrator/apply-style-via-shortcut-key.htmlよりお借りしました*/

/*
  * 分割された濁点・半濁点を結合された文字にする。ウムラウトなどは無視する
  * @param {String} str 対象の文字列。URIエンコードされたもの
  * @return {String} 変換されたテキスト
*/


function combineDakuten(str) {
  // 置換対象の文字とその順番
  // ゔがぎぐげござじずぜぞだぢづでどばぱびぴぶぷべぺぼぽヴガギグゲゴザジズゼゾダヂヅデドバパビピブプベペボポ
  
  // 分割された文字
  var nfd = ['%E3%81%86%E3%82%99', '%E3%81%8B%E3%82%99', '%E3%81%8D%E3%82%99', '%E3%81%8F%E3%82%99', '%E3%81%91%E3%82%99', '%E3%81%93%E3%82%99', '%E3%81%95%E3%82%99', '%E3%81%97%E3%82%99', '%E3%81%99%E3%82%99', '%E3%81%9B%E3%82%99', '%E3%81%9D%E3%82%99', '%E3%81%9F%E3%82%99', '%E3%81%A1%E3%82%99', '%E3%81%A4%E3%82%99', '%E3%81%A6%E3%82%99', '%E3%81%A8%E3%82%99', '%E3%81%AF%E3%82%99', '%E3%81%AF%E3%82%9A', '%E3%81%B2%E3%82%99', '%E3%81%B2%E3%82%9A', '%E3%81%B5%E3%82%99', '%E3%81%B5%E3%82%9A', '%E3%81%B8%E3%82%99', '%E3%81%B8%E3%82%9A', '%E3%81%BB%E3%82%99', '%E3%81%BB%E3%82%9A', '%E3%82%A6%E3%82%99', '%E3%82%AB%E3%82%99', '%E3%82%AD%E3%82%99', '%E3%82%AF%E3%82%99', '%E3%82%B1%E3%82%99', '%E3%82%B3%E3%82%99', '%E3%82%B5%E3%82%99', '%E3%82%B7%E3%82%99', '%E3%82%B9%E3%82%99', '%E3%82%BB%E3%82%99', '%E3%82%BD%E3%82%99', '%E3%82%BF%E3%82%99', '%E3%83%81%E3%82%99', '%E3%83%84%E3%82%99', '%E3%83%86%E3%82%99', '%E3%83%88%E3%82%99', '%E3%83%8F%E3%82%99', '%E3%83%8F%E3%82%9A', '%E3%83%92%E3%82%99', '%E3%83%92%E3%82%9A', '%E3%83%95%E3%82%99', '%E3%83%95%E3%82%9A', '%E3%83%98%E3%82%99', '%E3%83%98%E3%82%9A', '%E3%83%9B%E3%82%99', '%E3%83%9B%E3%82%9A'] ;
  
  // 結合された文字
  var nfc = ['%E3%82%94', '%E3%81%8C', '%E3%81%8E', '%E3%81%90', '%E3%81%92', '%E3%81%94', '%E3%81%96', '%E3%81%98', '%E3%81%9A', '%E3%81%9C', '%E3%81%9E', '%E3%81%A0', '%E3%81%A2', '%E3%81%A5', '%E3%81%A7', '%E3%81%A9', '%E3%81%B0', '%E3%81%B1', '%E3%81%B3', '%E3%81%B4', '%E3%81%B6', '%E3%81%B7', '%E3%81%B9', '%E3%81%BA', '%E3%81%BC', '%E3%81%BD', '%E3%83%B4', '%E3%82%AC', '%E3%82%AE', '%E3%82%B0', '%E3%82%B2', '%E3%82%B4', '%E3%82%B6', '%E3%82%B8', '%E3%82%BA', '%E3%82%BC', '%E3%82%BE', '%E3%83%80', '%E3%83%82', '%E3%83%85', '%E3%83%87', '%E3%83%89', '%E3%83%90', '%E3%83%91', '%E3%83%93', '%E3%83%94', '%E3%83%96', '%E3%83%97', '%E3%83%99', '%E3%83%9A', '%E3%83%9C', '%E3%83%9D'] ;
  
  for(var i = 0, len = nfd.length ; i < len ; i++) {
    str = str.replace(new RegExp(nfd[i], 'ig'), nfc[i]) ;
  }
  
  return str ;
}
}
```