会社のログやマークや写真などをキャンバスの右上から横に40ピクセル、縦に30ピクセルの位置に配置するように、といった要求があります。Photoshopでは少し手間がかかってしまいます。情報パレットを見ながら、マスウやカーソルキーで正確な位置に移動させなければならないためです。
このような場合には、スクリプトで処理すると簡単です。特にバッチ処理などですべての画像の右下にロゴや文字を入れる場合に便利です。
ただ、スクリプトでもキャンバス上の任意の位置に移動させる命令がなく、相対的に移動させる命令しかありません。そこで、移動させるレイヤーの大きさを取得してから座標を計算し相対的に移動させます。
以下のサンプルは、アクティブになっているレイヤーを、それぞれの基準位置から横に40ピクセル、縦に10ピクセル移動させるものです。
このような場合には、スクリプトで処理すると簡単です。特にバッチ処理などですべての画像の右下にロゴや文字を入れる場合に便利です。
ただ、スクリプトでもキャンバス上の任意の位置に移動させる命令がなく、相対的に移動させる命令しかありません。そこで、移動させるレイヤーの大きさを取得してから座標を計算し相対的に移動させます。
以下のサンプルは、アクティブになっているレイヤーを、それぞれの基準位置から横に40ピクセル、縦に10ピクセル移動させるものです。
●左上を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 左側からの位置(40 pixel)
offsetY = 10; // 上側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x1 = parseFloat(layObj.bounds[0]);
y1 = parseFloat(layObj.bounds[1]);
layObj.translate(offsetX-x1, offsetY-y1);
-------------------------------------------------
●右上を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 左側からの位置(40 pixel)
offsetY = 10; // 上側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x2 = parseFloat(layObj.bounds[2]);
y1 = parseFloat(layObj.bounds[1]);
layObj.translate(w-offsetX-x2, offsetY-y1);
-------------------------------------------------
●左下を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 右側からの位置(40 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x1 = parseFloat(layObj.bounds[0]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(offsetX-x1, h-offsetY-y2);
-------------------------------------------------
●右下を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 右側からの位置(40 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetX-x2, h-offsetY-y2);
-------------------------------------------------
位置が固定されていない場合には以下のようにダイアログを出して値を入力するようにすることもできます。
●ダイアログで位置を入力
preferences.rulerUnits = Units.PIXELS;
offsetX = parseFloat(prompt("横位置",20));
offsetY = parseFloat(prompt("縦位置",10));
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x1 = parseFloat(layObj.bounds[0]);
y1 = parseFloat(layObj.bounds[1]);
layObj.translate(offsetX-x1, offsetY-y1);
また、単位はピクセルになっていますが、一番最初の行のUnits.PIXELSをUnits.MMにするとミリメートル単位になります。他の単位も指定できますが、この2つが指定できれば十分実用になるでしょう。
【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/
>
手持ちのiBook G4は見事、バッテリー回収対象になってましたorz
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 左側からの位置(40 pixel)
offsetY = 10; // 上側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x1 = parseFloat(layObj.bounds[0]);
y1 = parseFloat(layObj.bounds[1]);
layObj.translate(offsetX-x1, offsetY-y1);
-------------------------------------------------
●右上を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 左側からの位置(40 pixel)
offsetY = 10; // 上側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x2 = parseFloat(layObj.bounds[2]);
y1 = parseFloat(layObj.bounds[1]);
layObj.translate(w-offsetX-x2, offsetY-y1);
-------------------------------------------------
●左下を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 右側からの位置(40 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x1 = parseFloat(layObj.bounds[0]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(offsetX-x1, h-offsetY-y2);
-------------------------------------------------
●右下を基準にして移動
preferences.rulerUnits = Units.PIXELS;
offsetX = 40; // 右側からの位置(40 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetX-x2, h-offsetY-y2);
-------------------------------------------------
位置が固定されていない場合には以下のようにダイアログを出して値を入力するようにすることもできます。
●ダイアログで位置を入力
preferences.rulerUnits = Units.PIXELS;
offsetX = parseFloat(prompt("横位置",20));
offsetY = parseFloat(prompt("縦位置",10));
docObj = activeDocument;
layObj = docObj.activeLayer; // アクティブレイヤー
w = docObj.width.value;
h = docObj.height.value;
x1 = parseFloat(layObj.bounds[0]);
y1 = parseFloat(layObj.bounds[1]);
layObj.translate(offsetX-x1, offsetY-y1);
また、単位はピクセルになっていますが、一番最初の行のUnits.PIXELSをUnits.MMにするとミリメートル単位になります。他の単位も指定できますが、この2つが指定できれば十分実用になるでしょう。
【古籏一浩】openspc@po.shiojiri.ne.jp
< http://www.openspc2.org/
>
手持ちのiBook G4は見事、バッテリー回収対象になってましたorz
- ActionScript逆引きクイックリファレンス―5&MX&MX2004&8対応 for Windows & Macintosh
- 田中 康博 古籏 一浩 林 拓也
- 毎日コミュニケーションズ 2005-12
- おすすめ平均
- 良書です。
by G-Tools , 2006/08/28