2値化その後

2値化スクリプト、なんか散らかってきたので、
まとめページ作ろうと思ったんだが、
Dreamweaverで新規ページ作るやり方がわからなくなっていた。
CSSとかどうやって指定するんだったっけ。
とか、悩んでたらもうGWが終わりだ。
困った。
とりあえず最新版。
2値化スクリプト
・カスタムパターンのスクリプトもまぜてみた。
・ディザの2値化がおかしかったのを修正した。
・参考にTEST用のpsdも(使用前・使用後)いれてみた。
ところで、今自分の原稿にこのスクリプト実行して
その隙にご飯食べてるわけだけど、
先日、一枚エラーがでて、
へんてこな画像が保存されてたよ。
同じこと繰り返しても、おんなじエラーは出なかったので、
何が悪いのかよくわからない。
スクリプト実行前はファイルのバックアップをおすすめします。

2値化スクリプトその後

その時々でうまく動いたり動かなかったりした、
まとめて2値化のスクリプト、
OpenSpeceさんのサイトの既知のバグのページ
「CSの場合、ファイルブラウザが開いてたら、うまく動かない」
ってのを見て、
うち、CS5だけどさ、
思いつく限りありったけのウィンドウを閉じて
Scriptを動かしてみたら、ちゃんと動いたっぽい。
閉じたのは
・ほかのアプリケーション
(IllustratorとかBridgeとかエディターとか。ちゃんと終了までした。
ノートンさんは常駐)
・Finderのウィンドウ
・Photoshopのパネル類
(自分で作ったパネルとか、アクションのパネルとか。
でろーんとひらいてたのは、
ナビゲータとカラーとレイヤーだけ。
あとはアイコン化、もしくは非表示)
管理人はJavascriptの基礎があるわけではないので、
自分のスクリプトが悪いんだか、
Photoshopのバグなんだか、よくわかんないんだけど、
とりあえず、原稿15枚をバッチで加工してみて、
いままで3~4枚はエラーが出てたのが、
おんなじ15枚でエラーなしになったので、
これで作業進められそうです。
机の上は散らかすもんじゃないね。
おほほ。
これから先もうまく動きますように。

2値化スクリプトを使ってみたらいろいろまずかった

最近、原稿が少したまってきたので、
試しにスクリプトを使って2値化してみた。
するといろいろまずいことが判明。
■Windowsでzipをダウンロードして解凍すると文字化けしてた。■
(うちのPhotoshopはマック用)
あとで全部ローマ字ファイルに直しとく
■ディザの2値化がおかしい■
1ピクセルの点は印刷に出ないと思ったので、
一旦300dpiにして2値化してから1200dpiにして
4×4ピクセルにしてたんだが、
「4で割り切れなかったら、どーすんだろ?」
と思いつつ、アクションなんかだと、適当に融通きかせてくれてたので
あんまり心配してなかったら、心配するべきだった。
割り切れないと画面の一カ所で変な段差ができます。(縦横で)
これは割り切れるサイズにしてから4で割ったり掛けたりすれば
いいので何とかなると思う。
■Photoshopのレイヤーセットに順に2値化をしていくと
 なぜか出来上がった2値化トーンが非表示になったりする■
バッチで何枚か動かしたら、そんなことになった。
普通にファイルあけてスクリプト動かしたら、ちゃんと動くのになあ。
もうちよっと悩んでみる。
(訂正)
非表示になってんじゃなくて2値化がうまくいってなかった。
原稿のトーンのレイヤーセットを複製できてなくて、
なんでかどっかの真っ白けな背景を複製していて真っ白けトーンが出来上がってる。
これがまた、その時々で複製ができてたりできてなかったりするので、
何が悪いんだか、アホな管理人にはさっぱり。
長期戦で粘ってみる。
管理人、ぼけてんなあ。

まとめて2値化(修正例:レイヤーセットの名前を変えたい)

うちの原稿のトーンのための
レイヤーセットはそんな名前じゃないやい、
という場合。
まとめて2値化(修正例:修正しないと動かないとこ)
上記は修正した上で、
一気に2値化
・判定-2値化の部分のL=に続く部分を
 自分の原稿のレイヤーセットの名前に変更する。

まとめて2値化(修正例:斜めの縞なパターンを追加したい)

斜線45度40線のトーンを追加したい、
という場合。
まとめて2値化(修正例:修正しないと動かないとこ)
上記は修正した上で、
naname40を追加
60sima-tate.jsxを修正して40sima-naname.jsxを作る。
線数を40に
角度は45に変更。
一気に2値化
まとめスクリプトで
・スクリプト読み込みのための3行を追加。
・判定・2値化の部分で1行を追加。
既存の行をコピペして
ピンクの部分だけ修正すればいけるはず。

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

アミは60線だよ、
という場合。
まとめて2値化(修正例:修正しないと動かないとこ)
上記は修正した上で、
ami60に変更
80ami.jsxを修正して60ami.jsxを作る。
線数を60に
一気に2値化
まとめスクリプトで
80ami.jsxのパスを60ami.jsxに変更する。
自分がわかるように変数もami60に変更する。
(訂正:
解像度は元の原稿の値を取得して2値化のときに流用するように修正したので、
600dpiだろうが、1200dpiだろうが、動くはず。)

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

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

まとめて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値化するスクリプトを組んじゃえ、
ということで、作ってみた。
こいつをアクションに登録して
バッチを実行すれば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
こっちでお願いします)

白いアミカケ

シド・フィールドの「映画を書くためにあなたがしなければならないこと」を読んだらさ、
「原稿を書こうとしたとたん、
鉛筆を削りたくなったり、掃除をしたくなったりする」
って書いてあった。
まったくその通りだ。
意志薄弱な管理人はスクリプトに逃げる。
で白いアミのスクリプト。
■■■■■■■ここからスクリプト■■■■■■■
//原稿ファイルとサイズ
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のお世話になりました。(===で囲ってるとこ)
こんなプラグインのお世話になるなんて。
チョー悔しいっ。
何書いてるかさっぱりわからないので、嫌いなんだ、コイツ。