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

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

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

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

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11で記事のコードを実行し、結果を「Photoshop 2026で実行した結果」に足しました。

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

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

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

🟠 注意点

  • 対象色はRGB値ではなくLab値で指定します。スポイトで消したい背景色を採取し、描画色の色見本からAdobeカラーピッカーを開いてL・a・bを確認します。コードの selcol(88, -79, 81); の3つの数値を、その順に置き換えてください
  • 許容量の設定箇所は var allowance = 20; です。値を変える場合は複製したPSDで試し、背景の残りだけでなく、残したい被写体まで消えていないか確認してください。色の採取・Lab値の設定操作と、許容量を変更した実行は今回実機では確認していません
対象色や許容値などの色域範囲を指定する設定コードの画面。
スポンサーリンク

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

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

STEP.1 スクリプトを格納

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

このコードは最上位から順に処理し、エラーで途中停止する場合があります。画素を直接削除し、処理済みレイヤーの表示も変えるため、元PSDを複製してから試してください。グループ内の処理は未確認です。

hideLayer();をコメントアウトしても、下のレイヤーへ移るループは残ります。複数レイヤーの文書で1枚だけに処理を限定する変更ではありません。この変更での実行は未確認です。

処理を終えたレイヤーは、順に非表示にしています。

色域指定は画面に見えている色で選ぶので、上のレイヤーを隠して、下のレイヤーの色が見えるようにするためです。

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を再起動します。

Photoshop 2026(Windows)では、C:\Program Files\Adobe\Adobe Photoshop 2026\Presets\Scripts にこのフォルダーがありました。

このフォルダーへファイルを置くには管理者の権限が要るため、2026年10月の確認では配置と再起動は試していません。

[ファイル]→[スクリプト]→[参照]で保存したファイルを選べば、フォルダーに置かずに実行できました。

STEP.2 スクリプトを実行

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

実行中も実行後も、画面には何も表示されません。

確認した3枚の処理が完了した例では、3枚とも非表示になりました。途中停止では未処理のレイヤーが残ります。目のアイコンで1枚ずつ表示を戻し、削除結果を確かめてください。

指定の色が見えないレイヤーがあると、そこで処理が止まります(詳しくは「Photoshop 2026で実行した結果」)。


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

Photoshop 2026で実行した結果

2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Pro で、記事のコードを変えずにCGM_removeBgColor.jsxとして保存し、[ファイル]→[スクリプト]→[参照]から実行しました。

試したのは、800×500ピクセルの文書に「写真_1」「写真_2」「写真_3」の3枚のレイヤーを重ねた練習用のファイルです。

各レイヤーは、コードの指定と同じLab値(L 88、a -79、b 81)の緑で塗り、真ん中に円・四角・三角を置きました。

ファイルの用意は別のスクリプトで行ったので、確認には含めていません。

試したファイル実行後
3枚とも緑の背景3枚とも緑が消えて図形だけが残り、3枚とも非表示になった
真ん中の1枚だけ白の背景一番上の1枚だけ緑が消えて非表示になり、白の背景の1枚で止まった。一番下の1枚は緑が残った
背景レイヤー緑の部分が透明にならず、背景色(白)で塗られた(命令だけを別に実行して確認)

3枚とも緑の背景のとき

一番上の「写真_1」を選んで実行すると、画面に何も表示されないまま処理が終わりました。

実行前のPhotoshopの画面。緑の背景の中央に赤い円があり、レイヤーパネルには写真_1から写真_3の3枚が表示されている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。実行前。3枚とも緑の背景で、一番上の「写真_1」(赤い円)だけが見えている。
実行直後のPhotoshopの画面。カンバスは透明の市松模様だけで、レイヤーパネルの3枚とも目のアイコンが消えている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。[ファイル]→[スクリプト]→[参照]から実行した直後。3枚とも非表示になり、カンバスには何も見えない。

終わった直後は3枚とも非表示で、カンバスには何も見えません。

レイヤーパネルの目のアイコンで3枚を表示し直すと、緑が消えて図形だけが残っていました。

3枚を表示し直したPhotoshopの画面。透明の背景に赤い円、青い四角、橙の三角が重なり、右上の拡大では図形の境界に細い緑の線が残っている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。目のアイコンで3枚を表示し直した後。緑が消えて図形だけが残った。右上は境界の部分を4倍に拡大したもので、1画素ほどの緑が残っている。

図形の境界には、1画素ほどの緑が線のように残りました。

境界で図形の色と緑が混ざった画素が、許容量20では十分に選択・削除されなかった可能性があります。許容量を変えた比較や残存画素の値の照合はしていません。

ヒストリーには、レイヤーごとに「色域指定」「消去」「選択を解除」が記録されました。

緑の見えないレイヤーがあると止まる

真ん中の「写真_2」だけを白の背景にしたファイルで実行すると、「写真_1」の緑が消えて非表示になったところで止まりました。

「写真_2」と「写真_3」は表示されたままで、「写真_3」の緑も残っています。

エラーの表示は出ないので、止まったことに気づきにくい点に注意してください。

途中で止まったPhotoshopの画面。白の背景に青い四角が見え、レイヤーパネルでは写真_1だけが非表示で、写真_3の緑が残っている
2026-10-19撮影。Adobe Photoshop 2026 (27.11.0)、Windows 11 Pro (10.0.26200)。真ん中の「写真_2」だけを白の背景にして実行した後。「写真_1」だけが処理され、「写真_2」で止まった。エラーの表示は出なかった。

コードの中の命令だけを別に試すと、指定の色が見えないときは選択範囲が空になり、続く消去の命令がエラーになりました。

掲載のコードはエラーを表示せずに終わるため、残りのレイヤーは処理されません。

非表示になったことだけで成功と判断せず、各レイヤーを表示し直し、指定色の消え方・残したい図形・境界を確認してください。

背景レイヤーでは透明にならない

背景レイヤーに同じ命令を使うと、緑の部分は透明にならず、背景色(このときは白)で塗られました。

この結果は、コードの中の命令だけを使い捨ての文書で実行して確かめたもので、画面からの実行は試していません。

透明にしたい場合は、背景レイヤーを通常のレイヤーに変えてから実行してください。

確かめていないこと

Scriptsフォルダーへの配置と再起動、hideLayer();をコメントアウトした1レイヤーでの実行、許容量や色の値を変えた場合、グループの中のレイヤー、取り消しで元に戻す操作、Macと他の版での動作は、今回は確かめていません。

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

スポンサーリンク

まとめ

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

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

よくある質問:レイヤー内の特定の色を自動で削除する

このスクリプトでは何ができますか?

Photoshopで、レイヤー内の特定の色(グリーンバックなど)を自動で選択して削除できます。背景色をまとめて処理したい場面や、複数レイヤーを一括で切り抜きたい作業で役立ちます。

どんなメリットがありますか?

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

削除する色はどのように指定しますか?

スポイトで背景色を採取し、描画色の色見本からAdobeカラーピッカーを開いてL・a・bを確認します。コードの selcol(88, -79, 81); にその順で数値を入れます。許容量は var allowance = 20; で設定します。まず複製したPSDで結果を確認してください。この設定操作と、色・許容量を変更した実行は実機未確認です。

全レイヤーに適用されますか?

最上位から順に処理しますが、全レイヤーを必ず処理し終える保証はありません。

スクリプトを実行すると、一番上のレイヤーから順に、指定した色域を選択・削除します。

ただし、指定の色が見えないレイヤーがあると、エラーを表示せずにそこで止まります。

hideLayerのコメントアウトでは対象を1枚に限定できません。下のレイヤーへ移る処理が残るため、対象範囲を変えるには別途コードの修正と検証が必要です。

実行後にレイヤーが非表示になるのはなぜですか?

色域指定は、画面に見えている色で選ぶ命令です。

処理を終えたレイヤーを非表示にして、下のレイヤーの色が見えるようにしています。

処理済みのレイヤーは非表示になります。途中停止で未処理のものが残る場合もあるため、目のアイコンで1枚ずつ表示を戻して結果を確認してください。

大切なファイルは、事前に別名保存してから試すと安心です。

スクリプトはどのように導入しますか?

記事のコードをテキストエディタ等に貼り付けてCGM_removeBgColor.jsxとして保存し、記事で案内しているフォルダに保存します。保存後にPhotoshopを再起動してください。

どうやって実行しますか?

[ファイル] → [スクリプト] → [CGM_removeBgColor] を選択します。

フォルダーに置かずに使う場合は、[ファイル]→[スクリプト]→[参照]で保存したファイルを選んで[読み込み]を押します。

レイヤー内の指定した色域が自動で削除されます。

スクリプトのコードはどこで確認できますか?

記事内に掲載しているほか、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。

メニューの表示や名称が記事と違う場合はどうすればよいですか?

Photoshopのバージョンによってメニューの名称や配置が変わることがあります。最新の操作手順は、Adobeの公式情報で確認してください。

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

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

Photoshopのおすすめ書籍

動作要件とPCの確認項目

周辺機器の優先度

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