DTP駆け込み寺
  1. [4480] IllustratorとPhotoshopのファイル名埋め込み 旧掲示板 2009/04/17 09:31

[ 返信 ]

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

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

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

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

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

DTP初心者 2009/04/17 09:31:39
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

001


スクリプト書けば出来そうですが、、
目的は何なんでしょ??

. 2009/04/17 09:58:58
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

002

そうですね。
スクリプトができる人であれば、とは感じました。
自分はまったくできないもので。。

目的ですが、
FrameMakerというadobe社ソフトにイラストをリンクしているのですが、
PDF化したときにファイル名をPDF上でチェックしたいのです。
現状だと、ファイル名チェックは1個ずつFrameMakerを開いてからの作業になります。

DTP初心者 2009/04/17 10:16:51
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

003

過去ログがうまく検索できませでしたが  読んだ記憶がありつす。

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

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

こんなのとか

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

こんなイメージなんでしょうか。

● 2009/04/17 10:54:02
Mozilla/4.0 (compatible; MSIE 5.17; Mac_PowerPC)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

004

すごい早い回答ありがとうございます。
かなりこれに近いと思います。
あとは自分で微調整できるか頑張ってみます。
感謝です。

DTP初心者 2009/04/17 11:12:31
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

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);
}
}

DTP初心者 2009/04/17 15:35:10
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

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);
//ここで処理をする
}
}
}

たけうちとおる 2009/04/18 13:26:54
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; ja-jp) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

007

javascriptでフォルダとファイルの判別って出来るんでしょうか?
出来るのであれば私も知りたいです。
それは置いといて、スレ主さんの目的を手っ取り早く実現するには現状のスクリプトから
必要な処理部分のみ取り出して、アクションと組み合わせるのがラクですよ。

通りすがり 2009/04/20 09:45:00
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

008

こんにちは。スレ主です。
ご回答ありがとうございます。
まだいろいろ調べていました。

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

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

知識ないので難しいものです。。もう少し頑張ってみます。
できたら報告いたします。

DTP初心者 2009/4/20 11:08
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

9

>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);
}
}
}

たけうちとおる 2009/4/20 12:19
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; ja-jp) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

10

入っているファイルが限定できるならそれでも可能でしょうが、、

Windowsでも、拡張子のないファイルは作れますし、拡張子の付いたフォルダも作れます。

. 2009/4/20 13:25
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 2.0.50727)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

11

>010さん
あくまで上の>005のスクリプトが実行できている上での話をされていると思いますよ。

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

通りすがり 2009/4/20 13:38
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

12

環境はWinXPです。
フォルダ名は一番上の階層だけは変更可能です。

現在以下のようになりました。
現在の動作
Aフォルダの中にabcフォルダがあります
Aフォルダを指定すると
@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);
}
}

DTP初心者 2009/4/20 13:47
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

13

連投すみません。かなり勘違いあるようで、
もう少しやり直します。
バッチ処理の方法だったのが理解できていなかったのと、
挿入位置がおかしかったと思います。

DTP初心者 2009/4/20 13:59
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

14

混乱させて申し訳ありませんが、
たけうちさんの書かれているのはスクリプト単体で実行されるやり方です。
>007と>011のレスはスクリプト単体で実行される場合は無視してください。

通りすがり 2009/4/20 14:15
Mozilla/5.0 (Macintosh; U; PPC Mac OS X 10.4; ja-JP-mac; rv:1.9.0.8) Gecko/2009032608 Firefox/3.0.8

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

15

連投すみません。かなり勘違いあるようで、
もう少しやり直します。
バッチ処理の方法だったのが理解できていなかったのと、
挿入位置がおかしかったと思います。

DTP初心者 2009/4/20 14:16
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

16

通りすがりさん
たけうちさん

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

以下の場合の動作ですが、
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);
}
}
}

DTP初心者 2009/4/20 14:46
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

17

>.さん
>Windowsでも、拡張子のないファイルは作れますし、拡張子の付いたフォルダも作れます。

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

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

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

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

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

のようにvar iが必要でした。もう一度関数が呼ばれたときに数字が上書きされていました。関数内で作成した変数は関数内で有効とつい思ってしまって失敗しました。(簡単なテストで見落としました)下記参照
URL 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);
}

たけうちとおる 2009/4/20 16:39
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; GTB5; .NET CLR 2.0.50727; .NET CLR 1.0.3705; InfoPath.1)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

18

通りすがりさん
たけうちさん

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

イラストレーターはこれを参考にまたチャレンジしてみます。

DTP初心者 2009/4/20 16:47
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705)

−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

19

DTP初心者さん
お疲れさまでした。

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

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

たけうちとおる 2009/4/20 18:26
Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_4_11; ja-jp) AppleWebKit/525.27.1 (KHTML, like Gecko) Version/3.2.1 Safari/525.27.1
−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−−

[4480] 旧掲示板 (2009/04/17 Fri 09:31)