hibitekitou
Photoshopでテキストレイヤーを作成するスクリプト
mac |2014-03-07
テキストファイル渡されて、この文字空間に配置してって用件発生しまして。ただ、メッシュでやるのはあまりよろしくない案件だったのでテクスチャを作ることとしました。数百行ある文字列を行ごとに別レイヤーにして作成するのを手でやるのは大変であるというのはたぶん誰でも想像はつくと思います(正確には1行を二つの項目に分解し、それぞれも別レイヤーにしないといけないし、両者のフォント、文字サイズ、位置を整えないといけない)。
ということでスクリプトを書くわけです。
新規書類を作成し、
preferences.rulerUnits = Units.PIXELS;
doc = documents.add(3000,300);
レイヤーを追加し、
layers = doc.artLayers;
layer1 = layers.add();
そのレイヤーをテキストレイヤーに変更し、
layer1.kind = LayerKind.TEXT;
テキストファイルから取得した文字列を入れ込んで、
layer1.textItem.contents = "テキストファイルから読み込んだ文字列";
文字列の属性を設定してやります。
layer1.textItem.size = 125; //フォントサイズ
layer1.textItem.font = "TelopMinPro-E"; //フォントの種類
layer1.textItem.justification = Justification.RIGHT; //右寄せ
layer1.textItem.color.rgb.red = 255;
layer1.textItem.color.rgb.green = 255;
layer1.textItem.color.rgb.blue = 255; //この上3行で色白にしてる
layer1.textItem.horizontalScale = 90; //水平比率
このレイヤーの位置を調整するにはバウンディングボックスを利用します。
例えばこのレイヤーの右下の位置を ( 100, 50 ) に移動させたいのなら、バウンディングボックスの右下の位置がどれだけ動けばその位置に行くか、という計算をします。移動量を ( transX, transY ) とするなら
transX = 100 - layer1.bounds[2];
transY = 50 - layer1.bounds[3];
layer1.translate( -transX, -transY);
です。なんでこうなるのかよく分からないのですけど、マイナスをかけています。
必要ならレイヤーセットを作成し、その中にテキストレイヤーを入れてやります。
newLayerSet = doc.layerSets.add();
layer1.move(newLayerSet, ElementPlacement.INSIDE);
というわけで、これを(文字列処理部分があるけど)行数分だけループで回して完了しました。
まぁだいたいそんな感じで大量のルーチンワークにスクリプトは必須ですな。
ということでスクリプトを書くわけです。
新規書類を作成し、
preferences.rulerUnits = Units.PIXELS;
doc = documents.add(3000,300);
レイヤーを追加し、
layers = doc.artLayers;
layer1 = layers.add();
そのレイヤーをテキストレイヤーに変更し、
layer1.kind = LayerKind.TEXT;
テキストファイルから取得した文字列を入れ込んで、
layer1.textItem.contents = "テキストファイルから読み込んだ文字列";
文字列の属性を設定してやります。
layer1.textItem.size = 125; //フォントサイズ
layer1.textItem.font = "TelopMinPro-E"; //フォントの種類
layer1.textItem.justification = Justification.RIGHT; //右寄せ
layer1.textItem.color.rgb.red = 255;
layer1.textItem.color.rgb.green = 255;
layer1.textItem.color.rgb.blue = 255; //この上3行で色白にしてる
layer1.textItem.horizontalScale = 90; //水平比率
このレイヤーの位置を調整するにはバウンディングボックスを利用します。
例えばこのレイヤーの右下の位置を ( 100, 50 ) に移動させたいのなら、バウンディングボックスの右下の位置がどれだけ動けばその位置に行くか、という計算をします。移動量を ( transX, transY ) とするなら
transX = 100 - layer1.bounds[2];
transY = 50 - layer1.bounds[3];
layer1.translate( -transX, -transY);
です。なんでこうなるのかよく分からないのですけど、マイナスをかけています。
必要ならレイヤーセットを作成し、その中にテキストレイヤーを入れてやります。
newLayerSet = doc.layerSets.add();
layer1.move(newLayerSet, ElementPlacement.INSIDE);
というわけで、これを(文字列処理部分があるけど)行数分だけループで回して完了しました。
まぁだいたいそんな感じで大量のルーチンワークにスクリプトは必須ですな。
コメント ( 0 )|Trackback ( )
コメント |
コメントはありません。 |
コメントを投稿する |
ブログ作成者から承認されるまでコメントは反映されません |