IllustratorとPhotoshopのファイル名埋め込み

WIndowsの、
イラストレーターフォトショップで質問です。

フォトショップ
該当のファイルのファイル名を
テキスト(画像なのでアウトライン
で複数ファイルに一気に入れたいのですが、
方法を知っている方いらっしゃればお願いします。
①画像の上下中央に入れる
②フォントサイズが大きいとはみ出すので、
5pt以下に設定したいです。
③できれば文字は赤

フォトショップは5.5を使用していますが、
5.5で無理な場合はCS2も持っているいるので、それでも大丈夫です。

イラストレーター
上とほぼ同じ内容ですが、
ファイルの中央にファイル名を一括で入れたいです。
バージョンはCS2です
» 001

スクリプト書けば出来そうですが、、
目的は何なんでしょ??
» 002
そうですね。
スクリプトができる人であれば、とは感じました。
自分はまったくできないもので。。

目的ですが、
FrameMakerというadobe社ソフトにイラストをリンクしているのですが、
PDF化したときにファイル名をPDF上でチェックしたいのです。
現状だと、ファイル名チェックは1個ずつFrameMakerを開いてからの作業になります。
» 003
過去ログがうまく検索できませでしたが  読んだ記憶がありつす。

 ググッてみました。 中央でないけど

http://blog.dgcr.com/mt/dgcr/archives/20061106140500.html

こんなのとか

http://blog.dgcr.com/mt/dgcr/archives/20061016140400.html

こんなイメージなんでしょうか。
» 004
すごい早い回答ありがとうございます。
かなりこれに近いと思います。
あとは自分で微調整できるか頑張ってみます。
感謝です。
» 005
たびたびすみません。
前に進んだのですが、
またつまずきました。。

下記のようにやりたいことは可能になりましたが、
サブフォルダの中まで処理ができませんでした。
サブフォルダの中まで一気に処理する方法はないでしょうか?

preferences.rulerUnits = Units.PIXELS;
colObj = new SolidColor();
colObj = new SolidColor();
colObj.cmyk.cyan = 0;
colObj.cmyk.magenta = 100;
colObj.cmyk.yellow = 100;
colObj.cmyk.black = 0;
documents.add(320,240);
activeDocument.selection.selectAll();
activeDocument.selection.fill(colObj,ColorBlendMode.NORMAL, 100, false);
offsetX = 20; // 右側からの位置(20 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
offsetW = 20; // 右側からの位置(20 pixel)
offsetV = 150; // 下側からの位置(150 pixel)

fontName = "HiraMaruPro-W4"; // ヒラギノ丸ゴ Pro W4
textAlign = Justification.RIGHT; // 右揃え
fontSize = 5;

psdFolderObj = Folder.selectDialog("Photoshop epsがあるフォルダを選択してください");
if (psdFolderObj)
{
psdFileList = psdFolderObj.getFiles("*.eps");
for (i=0; i< psdFileList.length; i++) {
open(new File(psdFileList[i]));
txt = psdFileList[i].name;
docObj = activeDocument;
activeDocument.changeMode(ChangeMode.CMYK);
w = docObj.width.value;
h = docObj.height.value;

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetX-x2, h-offsetY-y2);

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetW-x2, h-offsetV-y2);

activeDocument.flatten();
activeDocument.close(SaveOptions.SAVECHANGES);
}
}
» 006
こんにちは
サブフォルダ内を処理対象に含めるには
現在のスクリプトに
もし処理しようとするアイテムがフォルダなら
そのフォルダの中も処理するように書かないといけません。
さらに、その中にフォルダがあったらそのフォルダの中も処理するように書かないといけません。
でも、まだまだサブフォルダはあるかもしれません。

大変なので、その部分を関数化します。
関数に選択されたフォルダを送るとその中を処理します。
その中にフォルダがあれば、再度そのフォルダを関数に送ればいいわけです。

したのif(fileObjがフォルダなら){は
フォルダかどうか判定しないといけないのですが
ちょっとやりかたがわからなかったので、ぜひ調べてみてください。
出来たら教えてくださいね。

psdFolderObj = Folder.selectDialog("Photoshop epsがあるフォルダを選択してください");
if (psdFolderObj){
my_main_fnc(psdFolderObj);
}

function my_main_fnc(psdFolderObj){
var psdFileList = psdFolderObj.getFiles();
for (i=0; i< psdFileList.length; i++) {
var fileObj = psdFileList[i];
if(fileObjがフォルダなら){
//もう一度自分自身の関数を呼び出す。
my_main_fnc(fileObj);
}else{
//alert(fileObj.path);
//ここで処理をする
}
}
}
» 007
javascriptでフォルダとファイルの判別って出来るんでしょうか?
出来るのであれば私も知りたいです。
それは置いといて、スレ主さんの目的を手っ取り早く実現するには現状のスクリプトから
必要な処理部分のみ取り出して、アクションと組み合わせるのがラクですよ。
» 008
こんにちは。スレ主です。
ご回答ありがとうございます。
まだいろいろ調べていました。

サブフォルダまで指定は、
Photoshop CS3のアクションのバッチに機能として入っていますね。

しかし、
「必要な処理部分のみ取り出して、アクションと組み合わせるのがラクですよ。」
にまた苦戦しています。

知識ないので難しいものです。。もう少し頑張ってみます。
できたら報告いたします。
» 009
>javascriptでフォルダとファイルの判別って出来るんでしょうか?
いろいろ調べているのですがまだ不明です。。。できないのかなぁ?
それはそうと、もしDTP初心者さんがWindowsなら拡張子があるかないかで判断する事も出来ます。
if(fileObj.displayName.indexOf(".") < 0){
社内運営だったら、フォルダ名にルールがあるならば別の方法も考えられると思います。

あとは

//ここで処理をする
alert(fileObj.displayName);

の部分にopen(new File(psdFileList[i]));から先を記述すればいいと思います。
psdFileList[i]はfileObjに置き換えます。

psdFolderObj = Folder.selectDialog("Photoshop epsがあるフォルダを選択してください");
if (psdFolderObj){
my_main_fnc(psdFolderObj);
}

function my_main_fnc(psdFolderObj){
var psdFileList = psdFolderObj.getFiles();
for (i=0; i< psdFileList.length; i++) {
var fileObj = psdFileList[i];
if(fileObj.displayName.indexOf(".") < 0){
//もう一度自分自身の関数を呼び出す。
my_main_fnc(fileObj);
}else{
//ここで処理をする
alert(fileObj.displayName);
}
}
}
» 010
入っているファイルが限定できるならそれでも可能でしょうが、、

Windowsでも、拡張子のないファイルは作れますし、拡張子の付いたフォルダも作れます。
» 011
>010さん
あくまで上の>005のスクリプトが実行できている上での話をされていると思いますよ。

>DTP初心者さん
以下の様な感じでいけるはずです。
現状のループとかの不要な処理を省いて、
後はアクションにメニュー項目を挿入...で該当スクリプトを追加してバッチ処理すればオッケーです。
保存の処理もバッチで設定できるので不要です。
txt = activeDocument.name;
if(txt.indexOf(".eps")>-1){
//必要な処理
}
» 012
環境はWinXPです。
フォルダ名は一番上の階層だけは変更可能です。

現在以下のようになりました。
現在の動作
Aフォルダの中にabcフォルダがあります
Aフォルダを指定すると
①aフォルダのみ処理されます
②スクリプト警告で1個ずつOkか聞いてきます

サブを読みにいっているようですが、
最初の1フォルダのみのようです。

おそらくご教授していただいた記載の入れ方が違うのだとは理解しているのですが。。。

preferences.rulerUnits = Units.PIXELS;
colObj = new SolidColor();
colObj = new SolidColor();
colObj.cmyk.cyan = 0;
colObj.cmyk.magenta = 100;
colObj.cmyk.yellow = 100;
colObj.cmyk.black = 0;
documents.add(320,240);
activeDocument.selection.selectAll();
activeDocument.selection.fill(colObj,ColorBlendMode.NORMAL, 100, false);
offsetX = 20; // 右側からの位置(20 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
offsetW = 20; // 右側からの位置(20 pixel)
offsetV = 150; // 下側からの位置(150 pixel)

fontName = "HiraMaruPro-W4"; // ヒラギノ丸ゴ Pro W4
textAlign = Justification.RIGHT; // 右揃え
fontSize = 5;

psdFolderObj = Folder.selectDialog("Photoshop epsがあるフォルダを選択してください");
if (psdFolderObj){
my_main_fnc(psdFolderObj);
}

function my_main_fnc(psdFolderObj){
var psdFileList = psdFolderObj.getFiles();
for (i=0; i< psdFileList.length; i++) {
var fileObj = psdFileList[i];
if(fileObj.displayName.indexOf(".") < 0){
//もう一度自分自身の関数を呼び出す。
my_main_fnc(fileObj);
}else{
//ここで処理をする
alert(fileObj.displayName);
}
}
psdFileList = psdFolderObj.getFiles("*.eps");
for (i=0; i< psdFileList.length; i++) {
open(new File(psdFileList[i]));
txt = psdFileList[i].name;
docObj = activeDocument;
activeDocument.changeMode(ChangeMode.CMYK);
w = docObj.width.value;
h = docObj.height.value;

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetX-x2, h-offsetY-y2);

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetW-x2, h-offsetV-y2);

activeDocument.flatten();
activeDocument.close(SaveOptions.SAVECHANGES);
}
}
» 013
連投すみません。かなり勘違いあるようで、
もう少しやり直します。
バッチ処理の方法だったのが理解できていなかったのと、
挿入位置がおかしかったと思います。
» 014
混乱させて申し訳ありませんが、
たけうちさんの書かれているのはスクリプト単体で実行されるやり方です。
>007と>011のレスはスクリプト単体で実行される場合は無視してください。
» 015
連投すみません。かなり勘違いあるようで、
もう少しやり直します。
バッチ処理の方法だったのが理解できていなかったのと、
挿入位置がおかしかったと思います。
» 016
通りすがりさん
たけうちさん

とりあえず
作成しかけていたので、
単独の方をとりあえずやってみました。

以下の場合の動作ですが、
Aフォルダの中にabcフォルダがあります
Aフォルダを指定すると
・aフォルダのみ処理されます

かんり良い感じですが、
サブフォルダが1個までしか読めていないようです。

preferences.rulerUnits = Units.PIXELS;
colObj = new SolidColor();
colObj = new SolidColor();
colObj.cmyk.cyan = 0;
colObj.cmyk.magenta = 100;
colObj.cmyk.yellow = 100;
colObj.cmyk.black = 0;
documents.add(320,240);
activeDocument.selection.selectAll();
activeDocument.selection.fill(colObj,ColorBlendMode.NORMAL, 100, false);
offsetX = 20; // 右側からの位置(20 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
offsetW = 20; // 右側からの位置(20 pixel)
offsetV = 150; // 下側からの位置(150 pixel)

fontName = "HiraMaruPro-W4"; // ヒラギノ丸ゴ Pro W4
textAlign = Justification.RIGHT; // 右揃え
fontSize = 5;

psdFolderObj = Folder.selectDialog("Photoshop epsがあるフォルダを選択してください");
if (psdFolderObj){
my_main_fnc(psdFolderObj);
}

function my_main_fnc(psdFolderObj){
var psdFileList = psdFolderObj.getFiles();
for (i=0; i< psdFileList.length; i++) {
var fileObj = psdFileList[i];
if(fileObj.displayName.indexOf(".") < 0){
//もう一度自分自身の関数を呼び出す。
my_main_fnc(fileObj);
}else{

open(new File(fileObj));
txt = psdFileList[i].name;
docObj = activeDocument;
activeDocument.changeMode(ChangeMode.CMYK);
w = docObj.width.value;
h = docObj.height.value;

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetX-x2, h-offsetY-y2);

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetW-x2, h-offsetV-y2);

activeDocument.flatten();
activeDocument.close(SaveOptions.SAVECHANGES);
}
}
}
» 017
>.さん
>Windowsでも、拡張子のないファイルは作れますし、拡張子の付いたフォルダも作れます。

おっしゃるとおりですね。軽率な発現失礼いたしました。

>通りすがりさん
フォローありがとうございました。

さて、僕の環境でも同じ環境をつくり試したところ
Aフォルダの中にabcフォルダがあります
Aフォルダを指定すると
①aフォルダのみ処理されます
②スクリプト警告で1個ずつOkか聞いてきます

が再現しました。すいません。僕のスクリプトミスもあります。

for (var i=0; i< psdFileList.length; i++) {

のようにvar iが必要でした。もう一度関数が呼ばれたときに数字が上書きされていました。関数内で作成した変数は関数内で有効とつい思ってしまって失敗しました。(簡単なテストで見落としました)下記参照
http://www.openspc2.org/book/PhotoshopCS2/basic/002/index.html

エラーに備えるため".eps"の拡張子のみ動くようにしました。
}else if(fileObj.name.indexOf(".eps") > 0){

あと、PhptpshopCS2の処理を関数にしました。(ソースが見やすくなるので)

スクリプト警告で1個ずつOkか聞いてきますに関しては
activeDocument.save();
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
元々のソースでは変更されていたら保存時に確認するというようになっています。
上ように一回保存してから保存せずに閉じる。という手があります。

preferences.rulerUnits = Units.PIXELS;
colObj = new SolidColor();
colObj = new SolidColor();
colObj.cmyk.cyan = 0;
colObj.cmyk.magenta = 100;
colObj.cmyk.yellow = 100;
colObj.cmyk.black = 0;
documents.add(320,240);
activeDocument.selection.selectAll();
activeDocument.selection.fill(colObj,ColorBlendMode.NORMAL, 100, false);
offsetX = 20; // 右側からの位置(20 pixel)
offsetY = 10; // 下側からの位置(10 pixel)
offsetW = 20; // 右側からの位置(20 pixel)
offsetV = 150; // 下側からの位置(150 pixel)

fontName = "HiraMaruPro-W4"; // ヒラギノ丸ゴ Pro W4
textAlign = Justification.RIGHT; // 右揃え
fontSize = 5;

psdFolderObj = Folder.selectDialog("Photoshop epsがあるフォルダを選択してください");
if (psdFolderObj){
my_main_fnc(psdFolderObj);
}

function my_main_fnc(psdFolderObj){
var psdFileList = psdFolderObj.getFiles();
for (var i=0; i< psdFileList.length; i++) {
var fileObj = psdFileList[i];
if(fileObj.name.indexOf(".") < 0){
//もう一度自分自身の関数を呼び出す。
my_main_fnc(fileObj);
}else if(fileObj.name.indexOf(".eps") > 0){
psd_fnc(fileObj);
}
}
}

function psd_fnc(fileObj){
open(new File(fileObj));
txt = fileObj.name;
docObj = activeDocument;
activeDocument.changeMode(ChangeMode.CMYK);
w = docObj.width.value;
h = docObj.height.value;

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetX-x2, h-offsetY-y2);

layObj = docObj.artLayers.add();
layObj.kind = LayerKind.TEXT;
layObj.textItem.contents = txt;
layObj.textItem.font = fontName;
layObj.textItem.size = fontSize;
layObj.textItem.justification = textAlign;
layObj.textItem.color = colObj;
x2 = parseFloat(layObj.bounds[2]);
y2 = parseFloat(layObj.bounds[3]);
layObj.translate(w-offsetW-x2, h-offsetV-y2);

activeDocument.flatten();
activeDocument.save();
activeDocument.close(SaveOptions.DONOTSAVECHANGES);
}
» 018
通りすがりさん
たけうちさん

説明付き回答ありがとうございます。
結局全て頼ってしまいました。
本当に助かりました。
フォトショップについては、
自分が思っていた100%のものができました。

イラストレーターはこれを参考にまたチャレンジしてみます。
» 019
DTP初心者さん
お疲れさまでした。

実はすごく早くScriptを作られるのを見て感心していました。なので、返信もわざとヒントだけにしていましたm(_ _)m
動いて良かったですね。今後もぜひたくさんのスクリプトを作ってくださいね。

>結局全て頼ってしまいました。
いえいえそんなことはないですよ。これはDTP初心者さんが作られたソースです。

このページをシェア