クリエイター手抜きプロジェクト[99]Photoshop CS/CS2編 基準位置から指定したピクセル数移動させる
── 古籏一浩 ──

投稿:  著者:


会社のログやマークや写真などをキャンバスの右上から横に40ピクセル、縦に30ピクセルの位置に配置するように、といった要求があります。Photoshopでは少し手間がかかってしまいます。情報パレットを見ながら、マスウやカーソルキーで正確な位置に移動させなければならないためです。

このような場合には、スクリプトで処理すると簡単です。特にバッチ処理などですべての画像の右下にロゴや文字を入れる場合に便利です。

ただ、スクリプトでもキャンバス上の任意の位置に移動させる命令がなく、相対的に移動させる命令しかありません。そこで、移動させるレイヤーの大きさを取得してから座標を計算し相対的に移動させます。

以下のサンプルは、アクティブになっているレイヤーを、それぞれの基準位置から横に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

photo
ActionScript逆引きクイックリファレンス―5&MX&MX2004&8対応 for Windows & Macintosh
田中 康博 古籏 一浩 林 拓也
毎日コミュニケーションズ 2005-12
おすすめ平均 star
star良書です。

FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付] 速習Webテクニック FLASH8 ActionScript 実例サンプル47 おしえて!!FLASH 8 ActionScript .fla―Idea of Flash Creation できるクリエーター Flash 独習ナビ MX2004 & MX対応

by G-Tools , 2006/08/28