« 2010年12月 | メイン | 2011年2月 »

2011年1月 アーカイブ

2011年1月 1日

あけましておめでとうございます

あけましておめでとうございます。
今年もよろしくお願いします。

イベントで「頑張ってください」と言われて
俄然やる気になっている管理人です。
しかし体力がついてこない。
ただ今屍中。
(シカバネって書くとなんとなく、
カベルネソーヴィニヨンを思い出す。)

大阪はなぜか東京より寒いです。
うちの家、無駄に24時間換気が効いてるから
空調いれてもちっとも暖かくないのよー。
今ふとんの中で絵コンテ切ってます。
ゆたんぽ、my love。

2011年1月 8日

Adobeでちょっとした不具合

ちょっと前から、スクリプト書くのに
ExtendScript Toolkitを使ってんだけど、
サンプルとか、PDFとかからコピペしようとすると
なぜかとんでもない位置に貼付けられてしまうという
不具合がうちのマックではありまして。

Photoshopでは
どんなに並べ替えをしてお気に入りな状態にしても
起動するたびツールプリセットの
「ツールで並べ替え」にチェックが入っていて、
今までの並べ替え作業が無駄になるという、
なんだかちょっと腹立たしい状態になっておりまして。

 
うちのマックの不具合かもな、と
お正月にOSのクリーンインストールをしてしまいました。
はあ、すっきり。

で、結果、
ExtendScript Toolkitの不具合はなおったみたい。
Photoshopのツールプリセットはなおらなかった。

というわけで、
ツールプリセットの方は
チラリズムBLOGさんとこの
photoshopのちょっとした不満」の記事を参考に
タブレットのボタンにツールで並べ替え等を割り当てて
ほぼ満足しました。
なんにもぜずにちゃんと並んでたらいいのにね。

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

こないだからもたもたとスクリプトを書いてて、
かなりあっちこっちのサイトにお世話になりました。

OpenSpaceさんとこの
Adobe CS4 バージョンJavaScript リファレンス
Adobe Photoshop CS4自動化作戦

Zaco's Pageさんとこの
正規表現のページ

クリエイター手抜きプロジェクト[184]Adobe CS3編 非公開の機能を使う(複数のスクリプトファイルを連続実行する)

「いられ」のはなしさんとこの
PSフォント名

なにする?DTP+WEB

ありがとうございました。

うちのスクリプトがおかしくても
上記のサイトさんが悪いわけではありません。
ワタシの頭が悪いせいです。

白いアミカケ

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

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

■■■■■■■ここからスクリプト■■■■■■■
//原稿ファイルとサイズ
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年1月 9日

まとめて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だろうが、動くはず。)

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

斜線45度40線のトーンを追加したい、
という場合。

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

naname40を追加

60sima-tate.jsxを修正して40sima-naname.jsxを作る。
線数を40に
角度は45に変更。

一気に2値化

まとめスクリプトで
・スクリプト読み込みのための3行を追加。
・判定・2値化の部分で1行を追加。
既存の行をコピペして
ピンクの部分だけ修正すればいけるはず。

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

うちの原稿のトーンのための
レイヤーセットはそんな名前じゃないやい、
という場合。

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

一気に2値化

・判定-2値化の部分のL=に続く部分を
 自分の原稿のレイヤーセットの名前に変更する。

avi dhilgia

2012年6月

          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
silva komei

About 2011年1月

2011年1月にブログ「Nature Valley」に投稿されたすべてのエントリーです。過去のものから新しいものへ順番に並んでいます。

前のアーカイブは2010年12月です。

次のアーカイブは2011年2月です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。