おいしいAS3 -17ページ目

photoshopの置き換えフィルタの話の続き

まえの置き換えフィルタ用の画像生成スクリプトは
正直アクションでやるべき程度のことで
わざわざスクリプト使うようなとこではなかったので

ちょっとはスクリプトを使う意義を出す為に
『自分をマッピング画像ファイルに使う』
ってことをさせてみました

アクションでは自分を使ってマッピング
とかいうことをするには実行時に
ダイアログを出して手で選択するとかしないとダメです

スクリプトならそういうことはありません


使い方は、マッピングに使う白黒画像を一番上において
フィルタを適用したいレイヤーを選択した状態
$おいしいAS3
こういうカンジの状態で使います
マッピング用の白黒画像については
非表示でも問題ないです


$おいしいAS3
こんなカンジになります

ちょっと光沢つきます


こいつを使う利点は自分の一番上のレイヤーの画像を
マッピングに使うので置き換えフィルタのマップの位置を
調整しやすいとかぐらいです

そういうことじゃないなら
ガラスフィルタで白黒画像読み込んで使った方が
いろいろ調整が効きます





/*──────────────────────────
一番上のレイヤーの白黒画像を使用して
選択レイヤーにバンプマップを適用します
途中で自分を保存するので注意してください
──────────────────────────*/

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と
同じ処理してるのがいるとは思うんですが
まだ見つけてません

Photoshopの置き換えフィルタの話

AS3でDisplacementMapFilterを
使うときにもけっこうやってる事です
(リアルタイムでフレームイベントとしてやるには
ちょっと重すぎるので控えましたが…)

フォトショのフィルタ>変形>置き換えフィルタを使う時

おいしいAS3
こんなカンジの白黒の画像を使うと
おいしいAS3
こういうカンジになっちゃいます
画像が全体的に斜め45°の方向にズレます
キレイじゃありません、ってことで
白黒の画像を
おいしいAS3
みたいにするためのスクリプト
マップ画像がこういうふうになってると
おいしいAS3
こういうカンジになってくれます




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ファイルを選択すれば
白黒画像をマップ用の画像にします

ちなみに、別にスクリプトじゃなくても
アクションでできる範囲のことです

むしろ、反復処理とか伴わないこの手の処理は
どっちかっていうとアクションに置いておくのが筋な所

実際僕はアクションでこの処理用意してますし

まあ、もしか置き換えフィルタの
仕組みとか知らない人がいたら
理解の一助にでもなればってことで