Photoshopでは、画像アセットの書き出し時にピクセル数を指定しても、意図したサイズから1pxずれることがあります。
マスクを使用する方法もありますが、シェイプの境界に合わせて手動で正確な四角形の選択範囲を作る作業には手間がかかります。
そこで、レイヤーのシェイプ範囲を四角形で正確に選択するスクリプトを紹介します。
文書直下の描画があるレイヤーかグループを対象に、透明部分のトリミングで測った範囲から矩形選択を作ります。検証したシェイプでは描画範囲と一致しましたが、グループ内の子レイヤー・空レイヤー・背景には使えません。画像を書き出したり、書き出しサイズの1pxずれを補正したりするコードではありません。
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11で記事のコードを実行し、処理を呼び出す最後の1行が抜けていたのを直しました。
実行した結果と、うまく選べない場合は「Photoshop 2026で実行した結果」にまとめています。


輪郭を囲む矩形を選択する
この例の目的は、シェイプの輪郭そのものではなく、その描画を囲む矩形の選択範囲を作ることです。コードは透明部分のトリミングで範囲を測ります。
今回のスクリプトを使用すると、シェイプの外枠に沿った四角形の選択範囲をすばやく作成できます。
使用方法
STEP 1: スクリプトの配置
- 元PSDを保存し、表示状態を控えたコピーで試してください。文書直下の描画があるレイヤーかグループを1つ選びます。背景、空のレイヤー、グループの子レイヤーは対象にしません。既存の選択範囲は置き換わります。下記のコードをテキストエディタ等に貼り付けて保存
Photoshopのほかの操作は、まとめからご覧いただけます。

clippingArea.jsx
function clippingArea() {
var strtRulerUnits = preferences.rulerUnits;
if(strtRulerUnits != Units.PIXELS){ preferences.rulerUnits = Units.PIXELS; }
var srcDoc = activeDocument;
function visibleActiveOnly(docRef){
var visible = new Array();
for(var i = 0; i < docRef.layers.length; i++){
visible[i] = docRef.layers[i].visible;
if(docRef.layers[i].visible){ docRef.layers[i].visible = false; }
}
docRef.activeLayer.visible = true;
return visible;
}
function visibleOriginal(docRef, visible){
for(var i = 0; i < docRef.layers.length; i++){
docRef.layers[i].visible = visible[i];
}
return true;
}
function ClippingArea(docRef){
var x_size = docRef.width;
var y_size = docRef.height;
var before = docRef.activeHistoryState;
docRef.trim(TrimType.TRANSPARENT, true, true, false, false);
var x_offset = x_size - docRef.width;
var y_offset = y_size - docRef.height;
docRef.trim(TrimType.TRANSPARENT, true, true, true, true);
var x_trim_size = docRef.width;
var y_trim_size = docRef.height;
docRef.activeHistoryState = before;
this.left = x_offset;
this.right = x_offset + x_trim_size;
this.top = y_offset;
this.bottom = y_offset + y_trim_size;
}
var v_array = visibleActiveOnly(srcDoc);
var xy = new ClippingArea(srcDoc);
visibleOriginal(srcDoc, v_array);
srcDoc.selection.select(Array(
Array(xy.left, xy.top),
Array(xy.right, xy.top),
Array(xy.right, xy.bottom),
Array(xy.left, xy.bottom)
), SelectionType.REPLACE, 0, false);
if(strtRulerUnits != Units.PIXELS){ preferences.rulerUnits = strtRulerUnits; }
srcDoc = null;
xy = null;
v_array = null;
}
clippingArea();
最後の行のclippingArea();で、上で定義した処理を呼び出します。
2026年10月19日に確かめたところ、この1行が無い以前のコードは、[参照]から実行しても選択範囲もヒストリーも変わらず、何も起きませんでした。
以前のコードを保存している場合は、ファイルの最後にclippingArea();の1行を足してください。
- 保存した
clippingArea.jsxを、以下のフォルダーに入れます。
C:\Program Files\Adobe\Adobe Photoshop CC\Presets\Scripts上のパスは古い版の表記です。
Photoshop 2026(Windows)では、C:\Program Files\Adobe\Adobe Photoshop 2026\Presets\Scripts にこのフォルダーがありました。
2026年10月の確認では、このフォルダーへの配置と再起動は試していません。
- Photoshopを再起動します。
STEP 2: スクリプトを実行
- Photoshopを開く
- [ファイル] → [スクリプト] → [参照] からスクリプトを選択
- 実行すると、選択中のレイヤーの範囲に合わせた四角形の選択範囲が作成されます。
Scriptsフォルダーに置かなくても、[ファイル]→[スクリプト]→[参照]で保存したファイルを選べば実行できました。
実行する前に、レイヤーパネルで対象のレイヤーを1つ選んでおきます。
画面に確認の窓は出ず、すぐに選択範囲ができます。


Photoshop 2026で実行した結果
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、上のコードをclippingArea.jsxとして保存し、[ファイル]→[スクリプト]→[参照]から実行しました。
試したのは、1000×600ピクセルの文書に、楕円と角丸長方形のシェイプレイヤーと、グループの中に円のシェイプレイヤーを置いた練習用のファイルです。
ファイルの用意は別のスクリプトで行ったので、確認には含めていません。
レイヤーを選んで実行すると、外側に接する四角形が選ばれる

楕円のレイヤー(アイコン)を選んで実行すると、楕円の外側にぴったり接する四角形が選択範囲になりました。
選択範囲は横140〜401ピクセル、縦80〜281ピクセルで、レイヤーの範囲と一致しました。
ヒストリーには「なげなわツール」が1つ増えるだけで、途中で行う切り抜きは残りませんでした。
定規の単位をセンチメートルにした300ppiの文書でも、選択範囲はレイヤーの範囲と一致し、実行後の単位はセンチメートルに戻りました。
300ppiの文書は、画面からではなく、同じコードをスクリプトから呼び出して確かめました。
実行後、パネルで選んでいたレイヤーが前のレイヤーに戻ることがある

アイコンで実行した後に、レイヤーパネルで角丸長方形のレイヤー(ボタン)を選び直して実行すると、選択範囲はボタンの四角形になりました。
ただし、実行後のレイヤーパネルでは、ボタンではなくアイコンが選ばれた状態に戻っていました。
スクリプトが途中でヒストリーを実行前の状態に戻すときに、そのヒストリーの時点で選ばれていたレイヤーに戻るためと考えられます。
続けて別の操作をする前に、レイヤーパネルで目的のレイヤーを選び直してください。
グループの中のレイヤーでは、カンバス全体が選ばれる

グループの中の円のレイヤー(バッジ)を選んで実行すると、エラーは出ず、カンバス全体が選択範囲になりました。
このコードは範囲を測る前に文書の一番上の階層のレイヤーをすべて非表示にするので、選んだレイヤーもグループごと隠れてしまい、範囲を測れません。
グループの中のレイヤーには使わないでください。
グループそのものを選んで実行したときは、グループの中身の範囲が選ばれました。
グループそのものと、中身が空のレイヤー(カンバス全体が選ばれました)は、画面からではなく、同じコードをスクリプトから呼び出して確かめました。
背景レイヤーでは[トリミング]の窓が出て、ほかのレイヤーが非表示のまま残る

背景レイヤーを選んで実行すると、[トリミング]の窓が開きました。
背景には透明な部分が無いので、「透明ピクセル」が選べない状態になっていました。
[キャンセル]を押すと「エラー 8007: ユーザーにより操作がキャンセルされました」と出て、スクリプトが止まりました。

このとき、背景以外のレイヤー(グループ・ボタン・アイコン)は非表示のまま残りました。
ヒストリーにも表示の切り替えは残っていなかったので、レイヤーパネルの目のアイコンで1つずつ表示に戻す必要があります。
[トリミング]の窓で[OK]を押した場合は確かめていません。途中例外に備えたfinally処理はないため、表示状態だけでなく定規の単位や文書寸法も確認してください。
背景レイヤーを選んだまま実行しないでください。
確かめていないこと
Scriptsフォルダーへの配置と再起動、[トリミング]の窓で[OK]を押した場合、ドロップシャドウなどのレイヤー効果があるレイヤー、画像アセットの書き出しで1pxのずれが防げるかどうか、Mac版と他の版は確かめていません。
スクリプトの仕組み
- 対象以外を一時的に非表示にし、透明部分をトリミングして範囲を測る
- トリミング前後の寸法から矩形の座標を求め、ヒストリーを戻して選択範囲を作成
- 正常終了時に元の表示状態に戻す
検証したシェイプでは描画範囲に合う矩形を選択できました。ただし、このコードは書き出しや出力寸法の補正を行わず、画像アセットの1pxずれを防げるかは未確認です。
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめています。
シェイプや塗りを作る方法は、ほかにも書いています。




まとめ
選択範囲をシェイプの範囲に合わせて四角形で正確に作成
作成した選択範囲を確認し、書き出し寸法は別途照合
スクリプトを実行するだけで自動処理が可能
矩形の選択範囲を作る用途で試し、画像アセットの書き出し寸法は出力画像を開いて別に確認してください。
よくある質問:シェイプ範囲を四角形で選択するスクリプト
画像アセットの書き出しで、サイズが1pxずれることがあるのは、なぜですか?
Photoshopでは、画像アセットの書き出し時にピクセル数を指定しても、意図したサイズから1pxずれることがあります。マスクを使用する方法もありますが、シェイプの境界に合わせて手動で正確な四角形の選択範囲を作る作業には手間がかかります。
このスクリプトは、何をしますか?
レイヤーのシェイプ範囲を、四角形で正確に選択するスクリプトです。実行すると、選択中のレイヤーの範囲に合わせた四角形の選択範囲が作成されます。検証したシェイプでは描画範囲と一致しましたが、書き出し時の1pxずれを防ぐ機能としては確認していません。
標準機能では、できないのですか?
矩形選択ツールで手作業の選択はできます。この例は、透明部分のトリミングを使って描画を囲む範囲を測り、選択範囲を作る手順を自動化します。
スクリプトは、どうやって使いますか?
記事のコードをclippingArea.jsxとして保存し、元PSDのコピーで対象レイヤーを1つ選びます。初回は[ファイル]→[スクリプト]→[参照]から実行でき、Scriptsフォルダーへの配置と再起動は必要ありません。配置と再起動はスクリプトをメニューに常設するときの手順です。実行後は矩形の範囲と選択中のレイヤーを確認してから、次の編集へ進んでください。
スクリプトは、どんな仕組みで動いていますか?
対象以外を一時的に非表示にし、透明部分をトリミングした前後の寸法から範囲を求めます。ヒストリーを戻して表示状態を復元し、矩形の選択範囲を作ります。途中例外の場合の復元は保証されません。
記事のコードは、どこにありますか?
この記事で紹介しているコードは、GitHubのMOTOKI-LLC/cg-method-codeにもまとめられています。
記事の手順は、今のバージョンでも同じですか? 最新はどこで確認しますか?
2026年10月19日に、Photoshop 2026(27.11.0)とWindows 11 Proで、[ファイル]→[スクリプト]→[参照]から実行して確かめました。
Scriptsフォルダーは、Photoshop 2026ではC:\Program Files\Adobe\Adobe Photoshop 2026\Presets\Scriptsにありました。
Mac版とほかの版は確かめていないので、まず複製したファイルで試してください。
最新の情報はAdobe公式のヘルプで確認してください。
グループの中のレイヤーや背景レイヤーでも使えますか?
2026年10月19日にPhotoshop 2026で試したところ、グループの中のレイヤーではカンバス全体が選ばれました。
背景レイヤーでは[トリミング]の窓が開き、[キャンセル]すると、ほかのレイヤーが非表示のまま残りました。
文書の一番上の階層にあるレイヤーか、グループそのものを選んで実行してください。
