ARCHIVE  ENTRY  PROFILE  OTHERS


「星空つづり」母屋はこちら


最初の記事から見たい方はこちら

<< 文字を描画するスクリプト | main | 画像の一部を過去の状態に戻すヒストリーブラシ >>
2012.01.16 Monday

ウォーターマークっぽいテキスト刻印をするスクリプト

先のコードを発展させて、今度はウォーターマークっぽいテキストの刻印を行うスクリプトを作ってみた。
画像のキャンバスサイズに応じたフォントサイズを計算で設定し、左下に刻印する。つまり、画像の大きさが変わっても刻印されるテキストの大きさは相対的に同じ大きさになるようにしている。
テキストレイヤーは2種類作成し、背面にガウシアンボカシのテキスト、前面はそのままのテキストを重ねている。

前回から新たに加わった要素としては・・
・ドキュメントのキャンバスサイズ取得
・レイヤーの不透明度設定
・ラスタライズ
・ガウシアンフィルターの適用
・共通コードの関数化  あたりだろうか。

まずは、実行結果を。



コードは以下のとおり
--------------------------------------------------------------------------

#target photoshop

//パラメーター設定---------------------------------------------------------------------
//左下の角からキャンバスサイズの何%離して描画するか
var SetBack = 5;
//キャンバスサイズ(横)に対するフォントサイズの大きさ(%)
var perFontSize = 6;
//描画テキスト文字列
var Text = "星空つづり";

//----------------------------------------------------------------------------------------
//開いているアクティブなドキュメントを対象にセット
var docObj = app.activeDocument;
//単位をPOINTS指定
preferences.rulerUnits = Units.POINTS;
//カレントドキュメントのキャンバスサイズを取得
var cvsX = docObj.width, cvsY=docObj.height;
//フォントサイズ
var FontSize = cvsX * (perFontSize / 100)
//カラー構造体の宣言
var textColor = new SolidColor;

//背面のぼかしテキストの描画-----------------------------------------------------
//テキスト描画するレイヤーを作成してからレイヤーに関する設定
layObj_back = docObj.artLayers.add();
SetTextLayer(layObj_back, 30, "layer_back");

//描画色、フォント、描画位置設定
SetColor(textColor, 255, 255, 255);   //白色
SetFont(layObj_back, FontSize, textColor);
SetTextPosition(layObj_back,cvsX, cvsY, SetBack);

//テキストを描画
WriteText(layObj_back, Text);
//フォントサイズの15%でボカシ
layObj_back.applyGaussianBlur(FontSize / 15);

//前面のくっきりテキストの描画-----------------------------------------------------
//テキスト描画するレイヤーを作成してからレイヤーに関する設定
layObj_front = docObj.artLayers.add();
SetTextLayer(layObj_front, 60, "layer_front");

//描画色、フォント、描画位置設定
SetColor(textColor, 0, 0, 0);     //黒色
SetFont(layObj_front, FontSize, textColor);
SetTextPosition(layObj_front,cvsX, cvsY, SetBack);

//テキストを描画
WriteText(layObj_front, Text);
layObj_back.applyGaussianBlur(FontSize / 15);

//--------------------------------------------------------------------------------------
//テキストレイヤーの設定 (レイヤーオブジェクト, 不透明度, レイヤー名)
function SetTextLayer(layObj, Opacity, layerName) {
    layObj.kind = LayerKind.TEXT;
    layObj.opacity = Opacity;		//レイヤーの不透明度を設定[0..100]
    layObj.name = layerName;
}

//カラー構造体に描画色をセット (カラー構造体, r[0..255], g[0.255], b[0..255])
function SetColor(textColor, R, G, B) {
    textColor.rgb.red = R;
    textColor.rgb.green = G;
    textColor.rgb.blue = B;
}

//フォント設定 (レイヤーオブジェクト, フォントサイズ, テキスト描画色[カラー構造体])
function SetFont(layObj, FontSize, textColor) {
    layObj.textItem.font = "MS-UIGothic";
    layObj.textItem.size = FontSize;
    layObj.textItem.color = textColor;
} 

//描画位置設定・・キャンバスサイズに応じて左下角からセットバックさせた位置に。
//(レイヤーオブジェクト, キャンバスサイズ横, キャンバスサイズ縦, セットバック率)
function SetTextPosition(layObj, cvsX, cvsY, SetBack) {
    layObj.textItem.position = [cvsX * (SetBack / 100), 
                                                    cvsY - cvsY * (SetBack / 100)];
    layObj.textItem.justification = Justification.LEFT;
}

//テキスト描画してレイヤーをラスタライズする (レイヤーオブジェクト, 描画文字列)
function WriteText(layObj, Text) {
    layObj.textItem.contents = Text;
    layObj.rasterize(RasterizeType.TEXTCONTENTS);	//ラスタライズ
}

--------------------------------------------------------------------------

なお、このコードのjsxファイル(ps_text_watermark.jsx)も、ZIP化したものをここに置いておく。
実行前にPhotoshopに何か画像を読み込ませておく必要がある。実行方法は、例によってPhotoshopのメニューからファイル>スクリプト>参照で開いてやる。

ところで、jsxファイルの開発環境は、テキストエディターでも全然OKだが、PhotoShop に付いてくる Adobe ExtendedScript Toolkit が少し便利。
他の一般的な統合環境開発ツールなどに比べると非力だが、それでもエラーは教えてくれるし、ワンクリックでそのまま実行できるし、デバックに必要な最低限の機能は備えているようだ。


RSS1.0
Powered by
30days Album