Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

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

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

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

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

更新履歴

2017/12/05)こっそりNumber追加
2017/11/06)すっごい間違えてた恥ずかしい(こっそりアップデート
2017/11/05)すっごい間違えてた恥ずかしい

最新

画像のばし.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);
}
}

まえの

画像のばし.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 ;
}
}
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした