photoshopの置き換えフィルタの話の続き
まえの置き換えフィルタ用の画像生成スクリプトは
正直アクションでやるべき程度のことで
わざわざスクリプト使うようなとこではなかったので
ちょっとはスクリプトを使う意義を出す為に
『自分をマッピング画像ファイルに使う』
ってことをさせてみました
アクションでは自分を使ってマッピング
とかいうことをするには実行時に
ダイアログを出して手で選択するとかしないとダメです
スクリプトならそういうことはありません
使い方は、マッピングに使う白黒画像を一番上において
フィルタを適用したいレイヤーを選択した状態

こういうカンジの状態で使います
マッピング用の白黒画像については
非表示でも問題ないです

こんなカンジになります
ちょっと光沢つきます
こいつを使う利点は自分の一番上のレイヤーの画像を
マッピングに使うので置き換えフィルタのマップの位置を
調整しやすいとかぐらいです
そういうことじゃないなら
ガラスフィルタで白黒画像読み込んで使った方が
いろいろ調整が効きます
正直アクションでやるべき程度のことで
わざわざスクリプト使うようなとこではなかったので
ちょっとはスクリプトを使う意義を出す為に
『自分をマッピング画像ファイルに使う』
ってことをさせてみました
アクションでは自分を使ってマッピング
とかいうことをするには実行時に
ダイアログを出して手で選択するとかしないとダメです
スクリプトならそういうことはありません
使い方は、マッピングに使う白黒画像を一番上において
フィルタを適用したいレイヤーを選択した状態

こういうカンジの状態で使います
マッピング用の白黒画像については
非表示でも問題ないです

こんなカンジになります
ちょっと光沢つきます
こいつを使う利点は自分の一番上のレイヤーの画像を
マッピングに使うので置き換えフィルタのマップの位置を
調整しやすいとかぐらいです
そういうことじゃないなら
ガラスフィルタで白黒画像読み込んで使った方が
いろいろ調整が効きます
/*──────────────────────────
一番上のレイヤーの白黒画像を使用して
選択レイヤーにバンプマップを適用します
途中で自分を保存するので注意してください
──────────────────────────*/
main()
function main(){
var doc=app.activeDocument
var mapLyr=doc.artLayers[0]
var imgLyr=doc.activeLayer
var crrLyr
var clrLyr
var clr=new SolidColor()
crrLyr=mapLyr.duplicate(doc.artLayers[0],ElementPlacement.PLACEBEFORE)
crrLyr.applyCustomFilter(
[ 0, 0, 0, 0, 0,
0, 1, 2, 1, 0,
0, 0, 0, 0, 0,
0, -1, -2, -1, 0,
0, 0, 0, 0, 0],
4,127)
clrLyr=doc.artLayers.add()
doc.activeLayer=clrLyr
clr.rgb.hexValue="00FF00"
doc.selection.fill(clr)
clrLyr.blendMode=BlendMode.MULTIPLY
crrLyr=clrLyr.merge()
crrLyr.blendMode=BlendMode.NORMAL
crrLyr=mapLyr.duplicate(doc.artLayers[0],ElementPlacement.PLACEBEFORE)
crrLyr.applyCustomFilter(
[ 0, 0, 0, 0, 0,
0, 1, 0, -1, 0,
0, 2, 0, -2, 0,
0, 1, 0, -1, 0,
0, 0, 0, 0, 0],
4,127)
clrLyr=doc.artLayers.add()
clr.rgb.hexValue="FF0000"
doc.activeLayer=clrLyr
doc.selection.fill(clr)
clrLyr.blendMode=BlendMode.MULTIPLY
crrLyr=clrLyr.merge()
crrLyr.blendMode=BlendMode.SCREEN
crrLyr=crrLyr.merge()
doc.save()
imgLyr.applyDisplace(50,50,DisplacementMapType.STRETCHTOFIT,UndefinedAreas.REPEATEDGEPIXELS,doc.fullName)
crrLyr.remove()
crrLyr=mapLyr.duplicate(imgLyr,ElementPlacement.PLACEBEFORE)
crrLyr.applyCustomFilter(
[ 0, 0, 0, 0, 0,
0, 2, 3, 2, 0,
0, 0, 0, 0, 0,
0, -2, -4, -2, 0,
0, 0, 0, 0, 0],
1,0)
crrLyr.blendMode=BlendMode.SCREEN
crrLyr.name="光沢"
}
Photoshopの置き換えフィルタの話の続きで愚痴
Xcode付属のQuartzComposerにも
置き換えフィルタにあたる処理があるんだけど
これ、なんか途中にエッジの抽出か
なにかの処理を挿んでるみたいで
白黒画像をマッピングにつかっても
それっぽい結果になってくれたりするんですが
ここで書いたようなフォトショップの置き換えフィルタで
使うようなマップ画像を使っても
望むような結果を得られない訳なんですよ
そんなことされるとこっちは炎エフェクトとか
煙エフェクトとか簡単に作れないワケですよ
Appleはライトユーザーにも
簡単に使えるようにするのはいいところなんだけど
そのために応用の幅を狭めてしまう…
多分CoreAnimationのどこかに
ASでいうところのDisplacementMapFilterと
同じ処理してるのがいるとは思うんですが
まだ見つけてません
置き換えフィルタにあたる処理があるんだけど
これ、なんか途中にエッジの抽出か
なにかの処理を挿んでるみたいで
白黒画像をマッピングにつかっても
それっぽい結果になってくれたりするんですが
ここで書いたようなフォトショップの置き換えフィルタで
使うようなマップ画像を使っても
望むような結果を得られない訳なんですよ
そんなことされるとこっちは炎エフェクトとか
煙エフェクトとか簡単に作れないワケですよ
Appleはライトユーザーにも
簡単に使えるようにするのはいいところなんだけど
そのために応用の幅を狭めてしまう…
多分CoreAnimationのどこかに
ASでいうところのDisplacementMapFilterと
同じ処理してるのがいるとは思うんですが
まだ見つけてません
Photoshopの置き換えフィルタの話
AS3でDisplacementMapFilterを
使うときにもけっこうやってる事です
(リアルタイムでフレームイベントとしてやるには
ちょっと重すぎるので控えましたが…)
フォトショのフィルタ>変形>置き換えフィルタを使う時

こんなカンジの白黒の画像を使うと

こういうカンジになっちゃいます
画像が全体的に斜め45°の方向にズレます
キレイじゃありません、ってことで
白黒の画像を

みたいにするためのスクリプト
マップ画像がこういうふうになってると

こういうカンジになってくれます
上記をテキストエディタなりで保存して
拡張子を.jsxにして保存
フォトショでマップ画像にしたい白黒画像を開き
ファイル>スクリプト>参照で
先に保存したjsxファイルを選択すれば
白黒画像をマップ用の画像にします
ちなみに、別にスクリプトじゃなくても
アクションでできる範囲のことです
むしろ、反復処理とか伴わないこの手の処理は
どっちかっていうとアクションに置いておくのが筋な所
実際僕はアクションでこの処理用意してますし
まあ、もしか置き換えフィルタの
仕組みとか知らない人がいたら
理解の一助にでもなればってことで
使うときにもけっこうやってる事です
(リアルタイムでフレームイベントとしてやるには
ちょっと重すぎるので控えましたが…)
フォトショのフィルタ>変形>置き換えフィルタを使う時

こんなカンジの白黒の画像を使うと

こういうカンジになっちゃいます
画像が全体的に斜め45°の方向にズレます
キレイじゃありません、ってことで
白黒の画像を

みたいにするためのスクリプト
マップ画像がこういうふうになってると

こういうカンジになってくれます
main()
function main(){
var doc=app.activeDocument
var lyr=doc.activeLayer
var crrLyr=lyr.duplicate()
var clrLyr
var clr=new SolidColor()
crrLyr.applyCustomFilter(
[ 0, 0, 0, 0, 0,
0, 1, 2, 1, 0,
0, 0, 0, 0, 0,
0, -1, -2, -1, 0,
0, 0, 0, 0, 0],
4,127)
clrLyr=doc.artLayers.add()
clr.rgb.hexValue="00FF00"
clrLyr.move(crrLyr,ElementPlacement.PLACEBEFORE)
doc.activeLayer=clrLyr
doc.selection.fill(clr)
clrLyr.blendMode=BlendMode.MULTIPLY
crrLyr=clrLyr.merge()
crrLyr.blendMode=BlendMode.SCREEN
crrLyr=lyr.duplicate()
crrLyr.applyCustomFilter(
[ 0, 0, 0, 0, 0,
0, 1, 0, -1, 0,
0, 2, 0, -2, 0,
0, 1, 0, -1, 0,
0, 0, 0, 0, 0],
4,127)
clrLyr=doc.artLayers.add()
clr.rgb.hexValue="FF0000"
clrLyr.move(crrLyr,ElementPlacement.PLACEBEFORE)
doc.activeLayer=clrLyr
doc.selection.fill(clr)
clrLyr.blendMode=BlendMode.MULTIPLY
crrLyr=clrLyr.merge()
crrLyr.blendMode=BlendMode.NORMAL
}
上記をテキストエディタなりで保存して
拡張子を.jsxにして保存
フォトショでマップ画像にしたい白黒画像を開き
ファイル>スクリプト>参照で
先に保存したjsxファイルを選択すれば
白黒画像をマップ用の画像にします
ちなみに、別にスクリプトじゃなくても
アクションでできる範囲のことです
むしろ、反復処理とか伴わないこの手の処理は
どっちかっていうとアクションに置いておくのが筋な所
実際僕はアクションでこの処理用意してますし
まあ、もしか置き換えフィルタの
仕組みとか知らない人がいたら
理解の一助にでもなればってことで