クリエイター手抜きプロジェクト[432]Adobe Photoshop CS3〜CC2015編 複数ドキュメントにCopyrightなどの文字を入れる/古籏一浩

投稿:  著者:  読了時間:9分(本文:約4,400文字)



今回はPhotoshopで指定した位置に文字を入れるスクリプトです。

GUIでテキストフィールドに入力した文字を、アクティブになっているドキュメントに追加します。一行のみなので、日付やCopyrightを入れる場合に使えます。フォントや文字サイズ、色などをまとめて選択することができます。

アクティブになっているドキュメントだけでなく、開かれているすべてのドキュメントに対して、一括で文字を入れることもできます。スクリプトは長めなので説明は短めということで。





// Copyrightや日付の文字を入れる
(function(){
if (app.documents.length < 1){ return; }
var RGBColor = new SolidColor();
RGBColor.rgb.red = 0;
RGBColor.rgb.green = 0;
RGBColor.rgb.blue = 0;
// GUI部分
var winObj = new Window("dialog", "(c)や日付を追加", [0,0,320,340]);
var posType = winObj.add("dropdownlist", [20, 5, 300, 25],
["左上から", "右上から","左下から", "右下から"]);
winObj.add("statictext", [30, 30, 100, 50], "横の位置");
winObj.add("statictext", [170, 30, 250, 50], "縦の位置");
var diffW = winObj.add("edittext", [50, 50, 150, 70], 10);
var diffH = winObj.add("edittext", [190, 50, 290, 70], 10);
var drawText = winObj.add("edittext", [20, 100, 300, 125] , "Copyright K.F.");
var fontType = winObj.add("dropdownlist", [20, 130, 300, 155], getFontList());
winObj.add("statictext", [20, 165, 90, 185], "文字サイズ");
var fontSize = winObj.add("edittext", [100, 160, 180, 185] , "18");
var btnColor = winObj.add("button", [200, 160, 280, 185] , "色を選択");
var btnDate = winObj.add("button", [20, 200, 300, 225], "現在の日付を設定する");
var btnExec = winObj.add("button", [20, 230, 300, 255], "実行する");
var btnExecAll = winObj.add("button", [20, 260, 300, 285], "全てのドキュメントに実行する");
var btnEnd = winObj.add("button", [20, 290, 300, 315], "終了する");
// 日付を入れる
btnDate.onClick = function(){
var dateObj = new Date();
var y = dateObj.getFullYear();
var m = dateObj.getMonth() + 1;
var d = dateObj.getDate();
drawText.text = y+"/"+m+"/"+d;
}
// ボタンがクリックされたらレイヤーを生成して表示する
btnExec.onClick = function(){
makeLayer(app.activeDocument);
}
// ボタンがクリックされたら開かれている全てのドキュメントに対して処理する
btnExecAll.onClick = function(){
for(var i=0; i<app.documents.length; i++){
app.activeDocument = app.documents[i]; // アクティブにする
makeLayer(app.documents[i]);
}
}
// 色を選択するボタン
btnColor.onClick = function(){
var c = $.colorPicker();
RGBColor.rgb.red = (c & 0xff0000) >>> 16;
RGBColor.rgb.green = (c & 0xff00) >>> 8;
RGBColor.rgb.blue = c & 0xff;
}
// ウィンドウを閉じる
btnEnd.onClick = function(){
winObj.close();
}
winObj.center();
winObj.show();
// 書体一覧を取得する
function getFontList(){
var list = [];
for(var i=0; i<app.fonts.length; i++){
list.push(app.fonts[i].name);
}
return list;
}
// 指定されたドキュメントに日付などの文字を入れる
function makeLayer(docObj){
var layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
try {
var n = fontType.selection.index;
}catch(e){
var n = 0;
}
var w = docObj.width.value; // 横幅
var h = docObj.height.value; // 縦幅
var offsetX = parseFloat(diffW.text); // 横の余白
var offsetY = parseFloat(diffH.text); // 横の余白
try {
var p = posType.selection.index;
}catch(e){
var p = 3; // 未選択時は右下を基準にする
}
layObj.textItem.font = app.fonts[n].postScriptName; // 書体(フォント)を指定
layObj.textItem.size = parseFloat(fontSize.text); // 文字サイズを指定
layObj.textItem.color = RGBColor; // 色を指定
switch(p){
case 0: // 左上の場合
layObj.textItem.justification = Justification.LEFT; // 行揃え指定
layObj.textItem.contents = drawText.text;
var x1 = parseFloat(layObj.bounds[0]); // テキストの左座標
var y1 = parseFloat(layObj.bounds[1]); // テキストの上座標
layObj.translate(offsetX - x1, offsetY - y1);
break;
case 1: // 右上の場合
layObj.textItem.justification = Justification.RIGHT; // 行揃え指定
layObj.textItem.contents = drawText.text;
var y1 = parseFloat(layObj.bounds[1]); // テキストの上座標
var x2 = parseFloat(layObj.bounds[2]); // テキストの右座標
layObj.translate(w - x2 - offsetX, offsetY - y1);
break;
case 2: // 左下の場合
layObj.textItem.justification = Justification.RIGHT; // 行揃え指定
layObj.textItem.contents = drawText.text;
var x1 = parseFloat(layObj.bounds[0]); // テキストの左座標
var y2 = parseFloat(layObj.bounds[3]); // テキストの下座標
layObj.translate(offsetX - x1, h - y2 - offsetY);
break;
case 3: // 右下の場合
layObj.textItem.justification = Justification.RIGHT; // 行揃え指定
layObj.textItem.contents = drawText.text;
var x2 = parseFloat(layObj.bounds[2]); // テキストの右座標
var y2 = parseFloat(layObj.bounds[3]); // テキストの下座標
layObj.translate(w - x2 - offsetX, h - y2 - offsetY);
}
app.refresh(); // 画面を更新
}
})();


【古籏一浩】openspc@alpha.ocn.ne.jp
< http://www.openspc2.org/ >

「マッドマックス 怒りのデス・ロード」が評判いいみたいなのですが、見られるかどうか。仕方ないので、マッドマックス〜の語呂で遊んで妄想映画を楽しむことに。とりあえず、考えた妄想映画のタイトルは、こんな具合。

マッドマックス 怒りの松岡修造
ベイマックス 怒りのディズニー
マッドマックス 怒りのデス・ノート
マッドマックス 怒りのデバッグ!
マッドマックス 怒りの残業・・・
マッドマックス 怒りのドイツ

・Apple Watch(アップルウォッチ)使い方辞典
< http://www.openspc2.org/reibun/AppleWatch/2015/ >

・Photoshop自動化基本編
< http://www.amazon.co.jp/dp/B00W952JQW/ >

・Illustrator自動化基本編
< http://www.amazon.co.jp/dp/B00R5MZ1PA >

・Adobe JavaScriptリファレンス
< http://www.amazon.co.jp/dp/B00FZEK6J6/ >

・ExtendScript Toolkit(ESTK)基本編
< http://www.amazon.co.jp/dp/B00JUBQKKY/ >

・データビジュアライゼーションのためのD3.js徹底入門
< http://www.amazon.co.jp/dp/4797368861 >

・4K/ハイビジョン映像素材集
< http://www.openspc2.org/HDTV/ >

・クリエイター手抜きプロジェクト
< http://www.openspc2.org/projectX/ >