全部まとめて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のお世話になりました。(===で囲ってるとこ)
こんなプラグインのお世話になるなんて。
チョー悔しいっ。
何書いてるかさっぱりわからないので、嫌いなんだ、コイツ。

先日からお世話になってるサイトさん

こないだからもたもたとスクリプトを書いてて、
かなりあっちこっちのサイトにお世話になりました。
OpenSpaceさんとこの
Adobe CS4 バージョンJavaScript リファレンス
Adobe Photoshop CS4自動化作戦

Zaco’s Pageさんとこの
正規表現のページ
クリエイター手抜きプロジェクト[184]Adobe CS3編 非公開の機能を使う(複数のスクリプトファイルを連続実行する)
「いられ」のはなしさんとこの
PSフォント名
なにする?DTP+WEB
ありがとうございました。
うちのスクリプトがおかしくても
上記のサイトさんが悪いわけではありません。
ワタシの頭が悪いせいです。