画像の中心をグリッドに並べる方法と、横一列で画像の端のすき間を一定にする方法を紹介します。
寸法が違う画像では中心の間隔が同じでも端のすき間は同じになりません。
最終調査日:2026年10月3日。
数値・参照範囲・構文をローカルで確認しています。
今回AE本体のカメラ描画、色収差合成、音声再生、Undoは確認していません。
6枚と制御レイヤーの準備
960×540の練習コンポへ200×120の画像を6枚置き、画像_1〜画像_6という名前にします。
すべて2D、親なし、回転0、スケール100%、アンカーポイントは各画像の中央です。
ヌルを1枚作りadjustと名付けます。
スライダー制御を3つ追加し、エフェクト名と値を「列数」=3、「横間隔」=240、「縦間隔」=160にします。
6枚すべての「位置」へ次の式を貼ります。
ストップウォッチをAlt(MacはOption)を押しながらクリックし、2要素の位置へ入力します。
中心を同じ間隔で並べる式
var names = ["画像_1", "画像_2", "画像_3", "画像_4", "画像_5", "画像_6"];
var control = thisComp.layer("adjust");
var columns = control.effect("列数")(1).value;
var pitchX = control.effect("横間隔")(1).value;
var pitchY = control.effect("縦間隔")(1).value;
var result = value;
var order = -1;
for (var i = 0; i < names.length; i++) if (names[i] == thisLayer.name) order = i;
if (order >= 0 && isFinite(columns) && columns >= 1 &&
isFinite(pitchX) && pitchX > 0 && isFinite(pitchY) && pitchY > 0) {
columns = Math.min(names.length, Math.floor(columns));
var rows = Math.ceil(names.length / columns);
var col = order % columns;
var row = Math.floor(order / columns);
var x = thisComp.width / 2 + (col - (columns - 1) / 2) * pitchX;
var y = thisComp.height / 2 + (row - (rows - 1) / 2) * pitchY;
result = [x, y];
}
result;
| 入力・条件 | 期待する結果 | 確認点 |
|---|---|---|
| 列数3/画像_1 | [240,190] | 1行1列 |
| 列数3/画像_3 | [720,190] | 1行3列 |
| 列数3/画像_4 | [240,350] | 2行1列 |
| 列数3/画像_6 | [720,350] | 2行3列 |
| 列数2/画像_6 | [600,430] | 3行2列 |
横間隔と縦間隔は中心間の距離です。
200×120の画像なら、240・160の設定で上下左右の端のすき間は40になります。
縦一列にする場合は列数1・縦間隔80、横一列にする場合は列数6・横間隔120など、画面へ収まる間隔に変更します。
画像が大きい場合は重なるため、寸法やスケールも合わせます。
列数の小数は切り捨て、6を超える値は6へ制限します。
列数0以下・間隔0以下・一覧にないレイヤー名では元の位置を返します。
namesの順序が配置の順序です。
タイムラインに別の制御レイヤーを挿入しても順番は変わらず、枚数を変える場合はnamesも実際の画像名へ変更します。
横一列で端のすき間を一定にする式
寸法やスケールが違う画像を横一列に並べる場合は、6枚の位置の式を次へ置き換えます。
引き続き画像・プリコンポだけを使い、2D・親なし・回転0・中央アンカーに揃えます。
var names = ["画像_1", "画像_2", "画像_3", "画像_4", "画像_5", "画像_6"];
var gap = 40;
var result = value;
var order = -1;
var widths = [];
var total = gap * (names.length - 1);
for (var i = 0; i < names.length; i++) {
if (names[i] == thisLayer.name) order = i;
var layer = thisComp.layer(names[i]);
widths[i] = layer.width * Math.abs(layer.scale[0]) / 100;
total += widths[i];
}
if (order >= 0 && gap >= 0) {
var x = thisComp.width / 2 - total / 2;
for (var j = 0; j < order; j++) x += widths[j] + gap;
result = [x + widths[order] / 2, thisComp.height / 2];
}
result;
gap=40は端と端のすき間です。
画像のwidthは元の幅なので、表示幅はwidthにXスケールの絶対値を掛けて100で割って求めます。
例えば元幅100・200を両方50%にすると表示幅は50・100です。
2枚の中心間隔は25+40+50=115となり、元の幅だけを使った配置と異なります。
マスク・回転・文字の境界・遠近・親のスケールを含む見かけの端は、この式の計算範囲外です。
計算した並びがコンポより広い場合は、スケールやgapを下げるかコンポを広げます。
動かないとき・戻し方
参照エラーならadjustと各画像の名前、3つのエフェクト名を確認します。
元の位置のままならnamesの完全一致と列数・間隔を確認します。
旧記事はマーカーコメントをevalで評価する構成でした。
今回の練習は本文のコードを直接位置へ貼るため、マーカー内のコードや画像から文字を転記する必要はありません。
変更前にコンポを複製し、各位置・スケール・アンカー・親とキーを控えます。
戻すときは式を無効にし、準備で変更した値を控えた状態へ戻します。
旧版の参考画像
次の画像は既存記事の参考資料です。
今回の式と同じ数値や操作をAE実機で撮影したものではありません。






関連する操作
| やりたいこと | 最初に読む記事 |
|---|---|
| カメラとの距離で変える | 距離とカメラ制御 |
| RGBをずらして合成する | 色収差の基本設定 |
| 横長・縦長を切り替える | 画面サイズと表示切替 |
| 再生位置の曲名を出す | 曲名と対象レイヤー |
参照資料
Adobeのエクスプレッション言語資料を参照しています。
旧版の参考コード・関連記事
旧版の参考コードは本文の練習と対象・設定が異なる場合があります。
今回の操作は本文のコードを使います。






