Skip to main content
Participating Frequently
November 19, 2018
Answered

マルチ画面作成 スクリプト

  • November 19, 2018
  • 4 replies
  • 1048 views

マスク用にこう言った短形を自動で生成するスクリプトをご存知の方いらっしゃいませんか

画像は9面なのですが100面分割など大量のマスクを作る際、手で作業するのは時間の無駄な気がしまして、、、

ポイントはすべての長方形が違う色で生成され、レイヤーが分かれているところです

ガイド線ではなく短形が生成されるスクリプトが欲しいんですが自分で作らないとないんでしょうかね

    This topic has been closed for replies.
    Correct answer 12kiri

    練習を兼ねて書いてみました。(思ったより長くなった...)

    以下をメモ帳やテキストエディットなどにコピペして、文字コードUTF-8で適当な名前に拡張子「.jsx」で保存してください。

    (function(){

      var actDoc = app.activeDocument;

      var xCnt = prompt("ヨコの数(10以下)", 1);

      if(xCnt > 10) {alert("多すぎです"); return;}

      var yCnt = prompt("タテの数(10以下)", 1);

      if(yCnt > 10) {alert("多すぎです"); return;}

      var tCnt = xCnt * yCnt;

      preferences.rulerUnits = Units.PIXELS;

      var docW = actDoc.width.value;

      var docH = actDoc.height.value;

      var xx = Math.floor(docW / xCnt);

      var yy = Math.floor(docH / yCnt);

      var stx = 0, sty = 0, edx = xx, edy = yy, cntx = 1;

      for(var i = 1; i < tCnt + 1; i++) {

        var layObj = actDoc.artLayers.add();

        layObj.name = i;

        actDoc.selection.selectAll();

        var RGBcolor = makeRdmRGBcolor();

        actDoc.selection.fill(RGBcolor, ColorBlendMode.NORMAL, 100, false);

        var selReg = [[stx, sty], [edx, sty], [edx, edy], [stx, edy]];

        actDoc.selection.select(selReg);

        makeLayerMask();

        stx += xx; edx += xx; cntx++;

        if(cntx > xCnt) {

          cntx = 1; stx = 0; edx = xx; sty += yy; edy += yy;

        }

      }

    }());

    function makeLayerMask() {

      var idMk = charIDToTypeID("Mk  ");

      var desc14 = new ActionDescriptor();

      var idNw = charIDToTypeID("Nw  ");

      var idChnl = charIDToTypeID("Chnl");

      desc14.putClass(idNw, idChnl);

      var idAt = charIDToTypeID("At  ");

      var ref8 = new ActionReference();

      var idMsk = charIDToTypeID("Msk ");

      ref8.putEnumerated(idChnl, idChnl, idMsk);

      desc14.putReference(idAt, ref8);

      var idUsng = charIDToTypeID("Usng");

      var idUsrM = charIDToTypeID("UsrM");

      var idRvlS = charIDToTypeID("RvlS");

      desc14.putEnumerated(idUsng, idUsrM, idRvlS);

      executeAction(idMk, desc14, DialogModes.NO);

    }

    function makeRdmRGBcolor() {

      var colObj = new SolidColor();

      colObj.rgb.red = Math.floor(Math.random() * 255);

      colObj.rgb.green = Math.floor(Math.random() * 255);

      colObj.rgb.blue = Math.floor(Math.random() * 255);

      return colObj;

    }

    使用方法

    1. 新規RGBファイルを作成
    2. プログラムを実行(PhotoshopからJavaScriptの実行方法はお調べください)
    3. 分割したいヨコの数とタテの数を入力(どちらも10以下に制限しています)
    4. 左上 → 右下 方向へ、新規レイヤーがランダムな色でマスクを追加した状態で作成されます。

    テスト環境

    • MacOS 10.13.6 High Sierra
    • Photoshop CC2019(ver 20.0.1)

    注意事項など

    • 数値以外の値を入力すると何もしません。
    • ドキュメントサイズ(ピクセル)を分割数で割った余り分の余白が右と下に出る場合があります。
    • 100分割など、数が多くなると処理に時間がかかる場合があります。
    • ご使用は自己責任でお願いします。

    4 replies

    12kiri
    12kiriCorrect answer
    Participating Frequently
    November 19, 2018

    練習を兼ねて書いてみました。(思ったより長くなった...)

    以下をメモ帳やテキストエディットなどにコピペして、文字コードUTF-8で適当な名前に拡張子「.jsx」で保存してください。

    (function(){

      var actDoc = app.activeDocument;

      var xCnt = prompt("ヨコの数(10以下)", 1);

      if(xCnt > 10) {alert("多すぎです"); return;}

      var yCnt = prompt("タテの数(10以下)", 1);

      if(yCnt > 10) {alert("多すぎです"); return;}

      var tCnt = xCnt * yCnt;

      preferences.rulerUnits = Units.PIXELS;

      var docW = actDoc.width.value;

      var docH = actDoc.height.value;

      var xx = Math.floor(docW / xCnt);

      var yy = Math.floor(docH / yCnt);

      var stx = 0, sty = 0, edx = xx, edy = yy, cntx = 1;

      for(var i = 1; i < tCnt + 1; i++) {

        var layObj = actDoc.artLayers.add();

        layObj.name = i;

        actDoc.selection.selectAll();

        var RGBcolor = makeRdmRGBcolor();

        actDoc.selection.fill(RGBcolor, ColorBlendMode.NORMAL, 100, false);

        var selReg = [[stx, sty], [edx, sty], [edx, edy], [stx, edy]];

        actDoc.selection.select(selReg);

        makeLayerMask();

        stx += xx; edx += xx; cntx++;

        if(cntx > xCnt) {

          cntx = 1; stx = 0; edx = xx; sty += yy; edy += yy;

        }

      }

    }());

    function makeLayerMask() {

      var idMk = charIDToTypeID("Mk  ");

      var desc14 = new ActionDescriptor();

      var idNw = charIDToTypeID("Nw  ");

      var idChnl = charIDToTypeID("Chnl");

      desc14.putClass(idNw, idChnl);

      var idAt = charIDToTypeID("At  ");

      var ref8 = new ActionReference();

      var idMsk = charIDToTypeID("Msk ");

      ref8.putEnumerated(idChnl, idChnl, idMsk);

      desc14.putReference(idAt, ref8);

      var idUsng = charIDToTypeID("Usng");

      var idUsrM = charIDToTypeID("UsrM");

      var idRvlS = charIDToTypeID("RvlS");

      desc14.putEnumerated(idUsng, idUsrM, idRvlS);

      executeAction(idMk, desc14, DialogModes.NO);

    }

    function makeRdmRGBcolor() {

      var colObj = new SolidColor();

      colObj.rgb.red = Math.floor(Math.random() * 255);

      colObj.rgb.green = Math.floor(Math.random() * 255);

      colObj.rgb.blue = Math.floor(Math.random() * 255);

      return colObj;

    }

    使用方法

    1. 新規RGBファイルを作成
    2. プログラムを実行(PhotoshopからJavaScriptの実行方法はお調べください)
    3. 分割したいヨコの数とタテの数を入力(どちらも10以下に制限しています)
    4. 左上 → 右下 方向へ、新規レイヤーがランダムな色でマスクを追加した状態で作成されます。

    テスト環境

    • MacOS 10.13.6 High Sierra
    • Photoshop CC2019(ver 20.0.1)

    注意事項など

    • 数値以外の値を入力すると何もしません。
    • ドキュメントサイズ(ピクセル)を分割数で割った余り分の余白が右と下に出る場合があります。
    • 100分割など、数が多くなると処理に時間がかかる場合があります。
    • ご使用は自己責任でお願いします。
    sn15100Author
    Participating Frequently
    November 19, 2018

    まさか作ってくださる方がいらっしゃるとは、、

    ものすごく助かりました!ありがとうございます!

    ajabon grinsmith
    Community Expert
    Community Expert
    November 19, 2018

    短形とは矩形(くけい:長方形)のことでしょうか?

    お使いのバージョンやOSなども書いておくと、ちょうどいい物をお持ちの方が現れるかもしれません。

    また、「違う色」もちょっと曖昧すぎて、「よし特別に書いてあげよう」と思っている方には伝わりにくいかと…

    sn15100Author
    Participating Frequently
    November 19, 2018

    矩形(くけい:長方形)のことです

    失礼しました

    違う色に関しては、、ランダムでよいのですが、全く同じ色でなければい良いというか

    色の濃さが違う赤でも可です、、という感じです