フォトショップスクリプト5 - レイヤーのコピーペースト
フォトショップのスクリプトを作りました。
用途は、テクスチャにライトマップと呼ばれるものを適用する時に使うと少し便利かと思います。
Cドライブ直下にAというフォルダとBというフォルダがあるとします。
Bの中にはpsdというフォルダがあります。
XSIでは、Aを「Render_Pictures」、Bを「Pictures」と仮定すると分かりやすいかと思われます。
Mayaでは、Aを「renderData」、Bを「sourceimages」と仮定します。
スクリプト内のファイルパスを書き換えて使ってください。
フォトショップスクリプトでのファイルパスはちょっと書き方が違うので注意してください。
レンダリングされたデータが入ったフォルダからイメージを読み込み
テクスチャデータが入ったフォルダ内の「psd」フォルダの中のデータにコピーペーストで
貼り付けることをします。
ライトマップを作るときに何度も調整しながら適用するのがめんどくさいなぁ、などと
考えて作りました。
ただ、自分が使うことだけ想定しているので、かなりいい加減です。
両方のフォルダのファイルを順次読み込むのですが、読み込む順番を決めていないので、
ファイル順に読み込まれファイル順に適用されます。
なので、読み込みたいファイルと適用したいファイルが符合するようファイルネームに気をつける必要があります。
ファイルネームの最後に01などと番号を振れば解決できます。
それと、Aのフォルダのファイル数繰り返されるのでBのファイルも同じ分だけあるほうが良いです。
psdフォルダに他のテクスチャが混ざっている場合は他にフォルダを作って、ライトマップ用とするのが良いかと思います。
本当はもっと色々な状況で使えるようにしなければならないところですが、
知識がないので、ここまでです。
色々と調べてみたのですがレイヤーを複製するときに他のファイルに複製する、
という方法が見つかりませんでした。
仕方がないので、コピーペーストを使っております。
クリップボードを経由するので、非常に非効率的です。
一応最後にクリップボードを初期化するコマンドを追加しておきました。
昔いやな思いをしたので、フォトショップでクリップボードを経由する事が嫌いです。
スクリプトであればそれはないだろう。と思っていたのですが、自分の知識では無理でした。
その点はアクションの方が良いのですが、環境が変わってしまうと使えなくなってしまうので
スクリプトにしてみました。
ソースを載せておきます。
var dirA = new Folder("/c/A/"); var dirB = new Folder("/c/B/psd/"); var filesA = dirA.getFiles(); var filesB = dirB.getFiles(); var filecntA = filesA.length; upString = new File( upString ); for(i=0; i<filecntA; i++){ var docA=app.open(filesA[i]); docA.selection.selectAll(); docA.selection.copy(); docA.close(SaveOptions.DONOTSAVECHANGES); var docB=app.open(filesB[i]); docB.selection.selectAll(); docB.paste(); docB.save(); var upString = new String( app.activeDocument.path ); upString = upString.substring( 0, upString.lastIndexOf("/") ); upString = upString.concat( "/" + app.activeDocument.name ); upString = new File( upString ); targaSaveOptions = new TargaSaveOptions(); targaSaveOptions.alphaChannels = true; targaSaveOptions.resolution = TargaBitsPerPixels.TWENTYFOUR; if(activeDocument.channels.length >= 4) { targaSaveOptions.resolution = TargaBitsPerPixels.THIRTYTWO; for(a=activeDocument.channels.length-1;a>=4;a--) activeDocument.channels[a].remove(); } targaSaveOptions.rleCompression = false; docB.saveAs( upString, targaSaveOptions, true, Extension.LOWERCASE ); docB.close(SaveOptions.DONOTSAVECHANGES); } app.purge(PurgeTarget.CLIPBOARDCACHE);
では、今回はこの辺で。
コメントする
トラックバックする
トラックバック用URL: