2010年07月15日

冬のペン入れ

冬の長編ファンタジー

先日のページのペン入れ終了。

ちょいと前に買ったコミスタは結局なじめず、
Photoshopでせっせとトーン貼りしてます。
短編は去年からデジタルトーンですが、
長編は今回が初めてです。
やり直しがいくらでもきくので、いつまでたっても前に進みません。

PhotoshopってJavascript使って自動化できるっていうから、
ページ打ちとかトーンの2値化とか
自動でずだだーっとできれば楽だろうなあ、と思って、
とりあえずページ打ちを作ってみたんだけど、
なんかすっごく動きが遅い。
テキスト一行追加するだけなのにねえ。
作り方へたなんかしら。

トーンは砂とかアミとかごとにグループに分けて、
あとでアクションで処理してます。

冬の長編ファンタジー

ツールプリセットとレイヤーの構成はこんな感じ。

冬の長編ファンタジー

アクションはこんな感じ。

2010年07月16日

管理人のこだわり@デジタル原稿

ここ一年ほど原稿デジタル化であーでもない、こーでもないをやってて
なんとか、印刷に出せるものができるようになってきたので、
現状の覚え書き。

原稿作成にあたっての
管理人のこだわり一覧

・ペン入れは投稿サイズでなきゃ嫌だ。
・漫画原稿用紙は嫌いだ。
(コピー本作ったときに青の枠線が出るのがいやという、今となってはただの食わず嫌い)
・仕上がりサイズはA5だが、サークルカットとか使い回したりするので、
ぎりぎりまで2値化したくない。
そのうちB5で出したいとか言い出すかもしれないし。(いらぬ心配)
・1200dpiでいいんじゃね?(どの時点で!?)
・ベタのテリはなんといってもアナログだ。
・集中線はアナログへたくそなので、デジタルにしたいなあ。
・600dpiの1ピクセル単独点は印刷に出ないとのことだから、
原稿の最小単独点は600dpiで2×2ピクセル以上、1200dpiで4×4ピクセル以上にする。
・網トーンの点は小さい方がいいなあ。
・フリーソフトとかはなるべく使いたくない。
(パソコン使用上の管理人ポリシー。
インストールするものは最小限、カスタマイズも最小限、が好き)
・素材は手作り。オリジナルなブラシだぜ、やっぱり。(意気込みだけは立派)

なんか無駄なこだわりが随所にある気がするけど、
気にしない、気にしない。

2010年07月17日

原稿のスキャン@デジタル原稿

えー、前回書いた通りのこだわりに従って、
ペン入れとベタまではアナログで、
しかも投稿サイズです。
画材屋さんで買ってきたミューズケントに自分で枠線引いてます。
ペン入れはもっぱらゼブラの丸ペン。

というわけで、お察しのとおり、
スキャナーはA3対応機です。

取り込む時はちょっとだけ濃度調整してます。
(8bitグレーだ)

あとはPhotoshopから
・A5サイズにしたときの内枠、仕上がり線、塗りたしのガイドをひく。
・画像をスマートオブジェクトに変換してシャープフィルタをかける
・さらにレベル補正かける。
をアクションに登録して、バッチ処理で
管理人がご飯食べてる間にマックに頑張ってもらってます。

Adobeさんによるとスマートオブジェクトは
「すべてのデータ特性とともに元の画像のコンテンツを保持するため、非破壊編集を行うことができます」
ってことらしいので、
気休めに使ってるんだけど、
重いんだよね、これ。

あと、ごみ取りは手作業で地味に白で塗りつぶしてます。
フィルタのごみとりは、なんとなく、線がにょろーんとなってしまう気がして。

こまごまアクション@デジタル原稿

一通りバッチがすんだら、トーンを貼っていきます。
大量の乗算レイヤーを作ってぺたぺた塗っていきます。

最終的にはトーン2値化で
・アミ80線
・アミ10線
・砂目(というかただのディザ)
・横縞
・縦縞
上記の白トーン・黒トーンくらいにわけるので、
それぞれのグループを作って、濃淡問わずレイヤーを中に放り込んでいきます。

で頻繁に乗算レイヤー作るので、
レイヤーセット作成と乗算レイヤー作成は
アクションに登録してショートカットもあったりします。
あと、ページ打ちはこないだ作ったスクリプトをアクションに登録しました。
(ファイル名(=ページ番号)を取り込み、奇数・偶数ページにあわせて内枠の下にノンブル配置)


カケアミのグラデーションだけは
ちょっと乗算じゃない部分もあるけど。

Illustratorで原稿用紙いっぱいのカケアミ模様を作って、psdに変換。
カケアミしたい場所にグレーで塗りたくった乗算レイヤーを作る。(グラデーション付)
レイヤーを複製
カケアミpsdを張り付け

レイヤーの順番を
 ↓グレーのコピー(クリッピングマスク/ハードライト)
 ↓カケアミpsdのレイヤー(クリッピングマスク/乗算)
・グレーの元レイヤー(乗算)

って感じで並べて、ディザのレイヤーセットに入れてます。

あ、追加だ。
白のトーンは乗算にしたら見えなくなるので、
もちろん通常レイヤーだ。

2010年08月01日

ディザで2値化@デジタル原稿

今日、一番幸せだったとき。
「スーパーで冷凍食品買おうと、陳列棚に手を伸ばしたとき」
マジで頭から陳列棚にダイビングしようかと思った。
あ~、なんてすずしーの。

 

管理人はフォルダごとにアミとか砂とかトーンの種類を分けてるので、
レイヤーセットを塗り終わった後のグレスケデータファイルを複製して、
印刷所に出す用の2値データを改めて作ってます。

・レイヤーセットを新規ファイルに複製。
・画像を統合して線数とか形状とか選んで2値化。
・グレスケに戻して、元のファイルに複製、乗算レイヤーにする。
・もともとのフォルダは削除もしくは非表示。
・最後にまとめて2値化。

って感じにしてるんだけど、
ディザで2値化すると、とっても点が小さくなるので、
印刷でないかも、ってことで、もうちょっと点描ぽくしたくて、

・レイヤーセットを新規ファイルに複製。
・300dpiに変更。
・画像を統合してディザで2値化。
・グレスケに戻す。
・1200dpiに戻す。(ニアレストネイバーで。バイキュービックだとボケる)
・元のファイルへ複製、乗算レイヤーにする。
・もともとのレイヤーセットは削除もしくは非表示。
・最後にまとめて2値化。

って感じでいったん荒い解像度にしてディザにすることで、
荒い点々にしています。


てなわけで、

グレスケ元データ、ディザ時300~1200dpiのディザを比較してみた。
リンククリックで100%表示になります。
WEBでみるとこんなだけど、
印刷だといい感じに点描よ。
ちなみにテキストもディザのレイヤーセットに入れて加工してみた。
おかげで300dpiなんて、ひどいことに・・・。

なんでこんなことやるかというと、
自分が間違えてノンブルをレイヤーセットにつっこんでて、
痛い目にあったことがあるからです。
冬の長編ファンタジー

2011年01月08日

白いアミカケ

シド・フィールドの「映画を書くためにあなたがしなければならないこと」を読んだらさ、
「原稿を書こうとしたとたん、
鉛筆を削りたくなったり、掃除をしたくなったりする」
って書いてあった。
まったくその通りだ。
意志薄弱な管理人はスクリプトに逃げる。

で白いアミのスクリプト。

■■■■■■■ここからスクリプト■■■■■■■
//原稿ファイルとサイズ
var genko = activeDocument;
//現在レイヤー原稿サイズを取得
var layerSetRef = activeDocument.activeLayer ;
var haba=activeDocument.width ;
var takasa=activeDocument.height ;
var genkodpi = activeDocument.resolution;

//一時用新規ファイル作成
//グレースケールに変更
var tmpfile = app.documents.add(haba, takasa, genkodpi, "tmp");
activeDocument.changeMode(ChangeMode.GRAYSCALE) ;


//原稿の対象レイヤーを一時ファイルに複製
app.activeDocument = genko ;
layerSetRef.duplicate(tmpfile);

app.activeDocument = tmpfile ;
//背景を非表示
tmpfile.layers["背景"].visible=false ;
//一時ファイルのレイヤーを結合
tmpfile.mergeVisibleLayers();
//階調を反転(レイヤーを統合したとき背景の白と一緒になってしまうのをさけるため)
tmpfile.activeLayer.invert() ;


//2値化の形状を指定
var opt = new BitmapConversionOptions()
//2値化オプション
//ハーフトーンスクリーン
//(ディザ=DIFFUSIONDITHER)
opt.method = BitmapConversionType.HALFTONESCREEN ;
//角度
opt.angle = 45 ;
//線数
opt.frequency = 80 ;
//2値解像度
opt.resolution = genkodpi ;
//パターンの形状
//円
//(線はLINE)
opt.shape = BitmapHalfToneType.ROUND ;
//2値化実行
tmpfile.changeMode(ChangeMode.BITMAP,opt) ;

//グレスケに戻す
tmpfile.changeMode(ChangeMode.GRAYSCALE) ;


//階調を反転(元に戻す)黒を範囲指定して削除

tmpfile.activeLayer.invert() ;

// ここから色域指定=======================================================
var idClrR = charIDToTypeID( "ClrR" );
var desc3 = new ActionDescriptor();
var idClrs = charIDToTypeID( "Clrs" );
var idClrs = charIDToTypeID( "Clrs" );
var idShdw = charIDToTypeID( "Shdw" );
desc3.putEnumerated( idClrs, idClrs, idShdw );
var idcolorModel = stringIDToTypeID( "colorModel" );
desc3.putInteger( idcolorModel, 0 );
executeAction( idClrR, desc3, DialogModes.NO );
//ここまで色域指定=======================================================
//背景をレイヤーに変更
tmpfile.activeLayer.opacity = 100 ;
//選択範囲をクリア(透明に)
tmpfile.selection.clear() ;
//選択範囲解除
tmpfile.selection.deselect() ;


//2値化レイヤーを元のファイルに複製
activeDocument.activeLayer.duplicate(layerSetRef,ElementPlacement.PLACEBEFORE);

//元のファイルをアクティブ
activeDocument = genko;
//元のレイヤーセットを非表示
layerSetRef.visible = false;
app.activeDocument =tmpfile;
//新規ファイルを破棄
activeDocument.close(SaveOptions.DONOTSAVECHANGES);

■■■■■■■ここまでスクリプト■■■■■■■

黒のアミと違うのは以下の部分。
・レイヤーセットを結合させてから白黒反転
・2値化してグレスケに戻した後、また白黒反転
・黒で色域指定して選択範囲内削除
・乗算にせずに元のファイルに戻す。

で色域指定の仕方がわからなくてさ。
ScriptingListenerのお世話になりました。(===で囲ってるとこ)
こんなプラグインのお世話になるなんて。
チョー悔しいっ。
何書いてるかさっぱりわからないので、嫌いなんだ、コイツ。

全部まとめて2値化

さらに管理人の逃亡は続く。
いくつか2値化のスクリプトを書いたので、
せっかくだから、
ファイルの中のレイヤーセットの名前に従って
一気に2値化するスクリプトを組んじゃえ、
ということで、作ってみた。

こいつをアクションに登録して
バッチを実行すれば140ページの2値化の間に
晩ご飯が食べられる。うふふふふ。

管理人の作業はいたって雑なので、
「レイヤーセットの名前でどのスクリプトを実行するか判定する」
なんてぜーったい100%完璧に実行できない。
綴り間違いとかありすぎるのが予測できてしまう。
なので、2値化レイヤーをつくったあとは、
元のレイヤーセットは非表示で
判別できなかったレイヤーセットは放置プレイ。

ここでスクリプト終了させてる。
あとで、目で確認して最後のレイヤー統合、2値化は手動でするつもり。

きっちりした人は2値化までスクリプト組めばいいんだろうけど、
管理人は怖くて無理。

原稿ファイル

作業する原稿のレイヤーセットはこんな感じ。
実際には台詞とかいろんなレイヤーやレイヤーセットが
ここに追加されてる感じ。


■■■■■■■ここからスクリプト■■■■■■■

//2値化jsxファイルを読み込む

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/80ami.jsx");
fileRef.open("r");
ami80 = fileRef.read();

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/suna.jsx");
fileRef.open("r");
suna = fileRef.read();

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/10ami.jsx");
fileRef.open("r");
ami10 = fileRef.read();

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/40sima-yoko.jsx");
fileRef.open("r");
simayoko40 = fileRef.read();

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/60sima-tate.jsx");
fileRef.open("r");
simatate60 = fileRef.read();

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/80白ami.jsx");
fileRef.open("r");
siroami80 = fileRef.read();

fileRef = new File("Macintosh HD/Users/avi/Documents/Adobe Scripts/sirosuna.jsx");
fileRef.open("r");
sirosuna = fileRef.read();


//レイヤーセットの数を取得
var M =activeDocument.layerSets.length;

//レイヤーセットの数だけ
//(グループ0からグループM-1まで)
//レイヤーセットの名前で判定してパターンをかえて2値化を繰り返す
//(ここで外部のjsxを使用)
//名前が当てはまらなければスルー
for (i=0; i<=M-1; i++)
{
//判定するレイヤーセットをアクティブにして
//レイヤーセットの名前をLに格納
N =activeDocument.layerSets[i];
activeDocument.activeLayer=N;
L=N.name

//ここから判定-2値化
//例:一行目:Lが「ami」ならば「ami80」を実行
switch(L)
{
case L="ami": photoshop12.executeScript(ami80); break;
case L="suna": photoshop12.executeScript(suna); break;
case L="101": photoshop12.executeScript(ami10); break;
case L="yokosima": photoshop12.executeScript(simayoko40); break;
case L="tatejima": photoshop12.executeScript(simatate60); break;
case L="siroami": photoshop12.executeScript(siroami80); break;
case L="sirosuna": photoshop12.executeScript(sirosuna); break;


}
}

■■■■■■■ここまでスクリプト■■■■■■■

jsxファイルを作り足したりして、
修正するときはこの辺を直す↓
一気に2値化

あ、jsxへのパス間違えたりしても、
エラーとか出ずに
何もなかったふりしてスルーします、このスクリプト。
(2値化もなんにもしない)

photoshop12.executeScriptのとこは参考にしたのが
CS3でphotoshop10.executeScriptってなってたので、
CS5用に書き換えてみたんだが、
違うバージョンの番号にすると動くのかは試してない。

jsxを読み込む用の変数は
テキトーでいいんだけど、
最初はアルファベットで始めなきゃいけないとか
規則はあるみたいなので、
その辺は無難なもので。
(形状+線数とかにしたいよね)

Windowsの場合はパスを
C:\documents and settings\なんたらかんたら
みたいな感じにすればいけるんじゃないかと思うんだけど、
管理人はWindowsのPhotoshop持ってないから試せない。


Script全部まとめた圧縮ファイルおいときます。

(20110730訂正:おかしいとこあったのでリンク切りました。
最新のは
http://www.comic-gallery.net/blog/2011/05/2_4.html
こっちでお願いします)

2011年01月09日

まとめて2値化(zipのなかみ)

Script全部まとめた圧縮ファイルはこれ。
20110108-Script.zip

中身は
・2値化統合.jsx:レイヤーセットの名前に応じて以下の2値化スクリプトを実行。
・10ami.jsx:アミ10線のトーン
・80ami.jsx:アミ80線のトーン
・80白ami.jsx:アミ80線白のトーン
・suna.jsx:砂というかディザのトーン
・sirosuna.jsx:砂というかディザの白のトーン
・60sima-tate.jsx:縦縞60線のトーン
・40sima-yoko.jsx:横縞40線のトーン。
の8つ。

必要があれば、個別トーンのファイルを追加して
2値化統合.jsxに作ったファイルを追加すればOK。

まとめて2値化(修正例:修正しないと動かないとこ)

2値化まとめスクリプトの修正例
ここだけは修正しないと動かないって場所

一気に2値化

・jsxファイルのパス
 サンプルは保存場所はマックの書類の中にAdobe Scriptsってフォルダつくって
 そのなかに保存してる場合。
 少なくともユーザー名はそれぞれなので、
 最低限そこは直さないと動かない。
 Windowsの人はC:\Documents and Settings\なんとか
 で試してみてください。
・photoshop12.executeScriptのとこは
 自分のPhotoshopのバージョンにあわせないと動かない。
 CS5が12。

まとめて2値化(修正例:アミ80線を60線に変えたい)

アミは60線だよ、
という場合。

まとめて2値化(修正例:修正しないと動かないとこ)
上記は修正した上で、

ami60に変更

80ami.jsxを修正して60ami.jsxを作る。
線数を60に


一気に2値化

まとめスクリプトで
80ami.jsxのパスを60ami.jsxに変更する。
自分がわかるように変数もami60に変更する。

(訂正:
解像度は元の原稿の値を取得して2値化のときに流用するように修正したので、
600dpiだろうが、1200dpiだろうが、動くはず。)