juan (3871) の日記

2003 年 07 月 25 日
午前 08:18

Photoshopで漫画の台詞を一括作成

Photoshop7.0から、AppleScript,VBscript,Javascriptが使えるようになった。Javascriptで書けば、Mac/Windows両方で使えるらしい。
http://www.adobe.com/support/downloads/main.html
からPhotoshopの自分のアーキテクチャ用ページに飛んで、「Photoshop 7.0 Scripting plug-in v.1.0.2a」をダウンロード、インストールする必要がある。

これを使って、漫画の台詞を一度に読み込んで、縦書きのテキストレイヤーにするスクリプトを書いてみる。

--------ここから
//------ フォント名 --------
var fontName="ComicStudio-GAj";
var fontSize=12;
var crlf="\r\n";

//-------------------------------

var strtRulerUnits = preferences.rulerUnits;
var strtTypeUnits = preferences.typeUnits;
preferences.rulerUnits = Units.PIXELS;
preferences.typeUnits = TypeUnits.POINTS;
displayDialogs = DialogModes.NO;

var docRef =activeDocument;

var docName=docRef.name;
var curdir=docRef.path;//.parent;
var tname=docName.replace(/psd$/i,"txt");

var texts=curdir.getFiles(tname);
var f=texts[0];
var curline, str="";
var startx=docRef.width-20.0;
var starty=20.0;
var nexty=20;
var pos=new Array(startx,starty);

f.open("r","TEXT","????");
while(true){
    curline=f.readln();
    if (curline.length == 0){
        if (str.length >0){

            var tc=new SolidColor;
            tc.rgb.red=0;
            tc.rgb.green=0;
            tc.rgb.blue=0;
            var nt= docRef.artLayers.add();
            nt.kind= LayerKind.TEXT;
            nt.textItem.direction=Direction.VERTICAL
            nt.textItem.contents=str;
            nt.textItem.font=fontName;
            nt.textItem.size=fontSize;
            nt.textItem.color=tc;
            nt.textItem.antiAliasMethod=1; //none
            //文章の幅と高さを取得するため、ParagraphTextに変換
            nt.textItem.kind=TextType.PARAGRAPHTEXT;
            //位置計算のため文字単位をピクセル単位にする
            preferences.typeUnits = TypeUnits.PIXELS;
            //
            if (nt.textItem.height+pos[1]>nexty){
                nexty=nt.textItem.height+pos[1];
            }
            pos[0]=pos[0]-nt.textItem.width;
            if (pos[0]<0){
                pos[0]=startx-nt.textItem.width;
                pos[1]=nexty;
            }
            nt.textItem.position=pos;
            str="";
            nt.textItem.kind=TextType.POINTTEXT;
            preferences.typeUnits = TypeUnits.POINTS;
        }
    }else{
        str= str + crlf + curline;
    }
    if (f.eof){
        break;
    }
}
preferences.rulerUnits = strtRulerUnits;
preferences.typeUnits = strtTypeUnits;

f.close();
f=null;

----ここまで-----

このスクリプトをMakeName.jsというファイル名にして、Photoshopフォルダの中のPresets/Scriptsに入れておけば、ファイル→自動処理→Scripts...で動かすことが出来る。

これを使うためには、たとえば作業する漫画のファイルがp01.psdであれば、それと同じフォルダにp01.txtというファイル名でネームを記述したファイルを置いておく。

ネームファイルは、たとえば以下のようなもの

----この下からファイルの内容、この行は含みません----
こんにちは

やあ
あなたは
誰ですかな?

私ですか?

--------この上まで。この行は含みません------
つまりフキダシにはいることを考慮して文中適当に改行を入れた台詞を、空行で区切って記述する。最後の台詞の後にも空行を入れること。

注意点
フォント名は通常のフォントメニューで表示されるものではなく、内部的なPostScript名です。以下の手順でPostScript名を知ることが出来ます。

1 Photoshop上で背景のない新規書類を作成する。テキストレイヤーを作成、使いたいフォントを設定する。
2 以下のスクリプトをScriptsフォルダにいれ、実行する。

var textLayer = activeDocument.artLayers[0];
if (textLayer.kind == LayerKind.TEXT)
{
 alert(textLayer.textItem.font);
}

3 フォント名が表示されるので、メモしておく。

crlfは改行コードです。プラットフォームによって変える必要があるかもしれません。

なお、テキストレイヤーは上から適当に並べられるので、最終的には手作業で調整する必要があります。
やってみると案外時間がかかるので、最初から手作業でやってもあんまし変わらないかも。
この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。

吾輩はリファレンスである。名前はまだ無い -- perlの中の人

処理中...