Amazonで商品を見るセール会場へ

Photoshopスクリプト(jsx)│レイヤーの特定の色域を削除する方法

Photoshopでレイヤー内の特定の色(グリーンバックなど)を自動で削除するスクリプトを紹介します。

背景色をまとめて処理したい場面や、複数レイヤーを一括で切り抜きたい作業で役立ちます。

Photoshopでグリーンバックなどの背景色を一括削除するスクリプトの処理例。
目次

スクリプトを使用するメリット

  • 特定の色(例:グリーンバック)を自動で選択して削除できる
  • 複数画像をレイヤーとして読み込み、全レイヤーへ一括処理できる
  • 手作業で消去する手間を省き、大量の画像処理を効率化できる

🟠 注意点

  • 対象色はRGB値ではなくLab値で指定する必要があります
  • 許容値などの色域範囲はコード内で変更できます
対象色や許容値などの色域範囲を指定する設定コードの画面。

スクリプトで特定の色を削除

このスクリプトを実行すると、全レイヤーに対して指定した色域を選択・削除します。

STEP.1 スクリプトを格納

  1. 下記のコードをテキストエディタ等に貼り付けて保存します。

スクリプトを実行すると全レイヤーに適用されます。

対象が1レイヤーのみの場合は、hideLayer();をコメントアウトして実行することも可能です。

(連続処理時に表示順を制御するため、レイヤーを順次非表示にしています。

)

Photoshopのほかの操作は、まとめからご覧いただけます。

CGM_removeBgColor.jsx

function removeBgColor(){
    var topLayer = app.activeDocument.layers[0];
    app.activeDocument.activeLayer = topLayer;
    do {
      selcol(88, -79, 81); //指定色域 ※RGBじゃなくてLabの値を入れる!
      hideLayer();
      selectLayerBelow();
    } while(topLayer != app.activeDocument.activeLayer);

    function selcol(cL, cA, cB) {
        var allowance = 20; //許容量
        cLAB = [cL, cA, cB];
        var idClrR = charIDToTypeID("ClrR");
        var desc1426 = new ActionDescriptor();
        var idFzns = charIDToTypeID("Fzns");
        desc1426.putInteger(idFzns, allowance);
        var idMnm = charIDToTypeID("Mnm ");
        var desc1427 = new ActionDescriptor();
        var idLmnc = charIDToTypeID("Lmnc");
        desc1427.putDouble(idLmnc, cLAB[0]);
        var idA = charIDToTypeID("A   ");
        desc1427.putDouble(idA, cLAB[1]);
        var idB = charIDToTypeID("B   ");
        desc1427.putDouble(idB, cLAB[2]);
        var idLbCl = charIDToTypeID("LbCl");
        desc1426.putObject(idMnm, idLbCl, desc1427);
        var idMxm = charIDToTypeID("Mxm ");
        var desc1428 = new ActionDescriptor();
        var idLmnc = charIDToTypeID("Lmnc");
        desc1428.putDouble(idLmnc, cLAB[0]);
        var idA = charIDToTypeID("A   ");
        desc1428.putDouble(idA, cLAB[1]);
        var idB = charIDToTypeID("B   ");
        desc1428.putDouble(idB, cLAB[2]);
        var idLbCl = charIDToTypeID("LbCl");
        desc1426.putObject(idMxm, idLbCl, desc1428);
        var idcolorModel = stringIDToTypeID("colorModel");
        desc1426.putInteger(idcolorModel, 0);
        executeAction(idClrR, desc1426, DialogModes.NO);

        var idDlt = charIDToTypeID("Dlt ");
        executeAction(idDlt, undefined, DialogModes.NO);

        var idsetd = charIDToTypeID("setd");
        var desc1430 = new ActionDescriptor();
        var idnull = charIDToTypeID("null");
        var ref183 = new ActionReference();
        var idChnl = charIDToTypeID("Chnl");
        var idfsel = charIDToTypeID("fsel");
        ref183.putProperty(idChnl, idfsel);
        desc1430.putReference(idnull, ref183);
        var idT = charIDToTypeID("T   ");
        var idOrdn = charIDToTypeID("Ordn");
        var idNone = charIDToTypeID("None");
        desc1430.putEnumerated(idT, idOrdn, idNone);
        executeAction(idsetd, desc1430, DialogModes.NO);
    }

    function selectLayerBelow() {
      var desc = new ActionDescriptor();
      var ref = new ActionReference();
      ref.putEnumerated( charIDToTypeID( "Lyr " ), charIDToTypeID( "Ordn" ), charIDToTypeID( "Bckw" ) );
      desc.putReference( charIDToTypeID( "null" ), ref );
      desc.putBoolean( charIDToTypeID( "MkVs" ), false );
      executeAction( charIDToTypeID( "slct" ), desc, DialogModes.NO );
    }

    function hideLayer() {
        var idHd = charIDToTypeID("Hd  ");
        var desc1657 = new ActionDescriptor();
        var idnull = charIDToTypeID("null");
        var list162 = new ActionList();
        var ref300 = new ActionReference();
        var idLyr = charIDToTypeID("Lyr ");
        var idOrdn = charIDToTypeID("Ordn");
        var idTrgt = charIDToTypeID("Trgt");
        ref300.putEnumerated(idLyr, idOrdn, idTrgt);
        list162.putReference(ref300);
        desc1657.putList(idnull, list162);
        executeAction(idHd, desc1657, DialogModes.NO);
    }
 }

function CGM_removeBgColor(){
    try {
        removeBgColor();
    } catch (e){
    }
}

CGM_removeBgColor();
  1. CGM_removeBgColor.jsx を 以下のフォルダに保存します。
C:\Program Files\Adobe\Adobe Photoshop CC\Presets\Scripts\
  1. Photoshopを再起動します。

STEP.2 スクリプトを実行

  1. [ファイル] → [スクリプト] → [CGM_removeBgColor]を選択します。
  2. レイヤー内の指定した色域が自動で削除されます。

この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

シェイプや塗りを作る方法は、ほかにも書いています。

まとめ

  • 指定した色(Lab値)を一括で選択・削除できる
  • レイヤーごとに手作業で消去せず一括処理が可能
  • スクリプトを調整することで色域の範囲変更にも対応

定型的な背景削除作業を効率化するために、このスクリプトを活用して画像処理の手間を軽減してみてください。

次に学ぶ・作業環境を選ぶ

学習を続けたい方や、作業環境を整えたい方は、目的に合うガイドをご覧ください。

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次