« 2012年12月 | メイン | 2013年12月 »
●WindowsでのPhotoshop自動操作覚え書き |
2013年5月 9日 |
今までMacを仕事の環境にしていたためMacOS関連の情報が多かったのですが
まずは3Dソフトでレンダリングが終わったら自動的にムービーを再生する方法を考えます たとえば マイドキュメントに aaa.avi がある場合コマンドプロンプトで 同様のコマンドをPythonから実行するためにsubprocessモジュールを使用した例がこうなります import subprocess,os #動画再生ソフトのパス Prayer_path = "C:/Program Files (x86)/Windows Media Player/wmplayer.exe" f_path = "C:/Users/yukimi/Documents/aaa.avi" #ファイルパスをWindows形式に f_path_w = os.path.normcase(f_path) args = "\"" + Prayer_path + "\" " + f_path_w subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0) subprocess.Popen()のオプションを設定して実行することにより戻り値を待たずに実行できます 一方 別のソフトの戻り値を待ちたい場合は subprocess.call() を使うことになります (subprocess.call()ってムービーを再生させると戻り値を待って 再生中のウィンドウを閉じるまでスクリプトが止まることになります)
さて、2つ目のPhotoshopを操作する方法ですが javascriptを使ったスクリプトも同様にコマンドプロンプトからも実行できるのですが Photoshpで新規レイヤを作るスクリプト以下に書きます VB_Hub.vbs Option Explicit 'コマンドライン引数の取得 Dim oParam Set oParam = WScript.Arguments '実行するアプリケーションとしてPhotoshopを指定 Dim objApp Set objApp = CreateObject("Photoshop.Application") ''スクリプトの実行 objApp.DoJavaScriptFile oParam(0)
#target photoshop var active_doc = activeDocument //レイヤの作成 active_doc.artLayers.add()
import subprocess,os #マイドキュメントのパス mydoc_path = "C:/Users/moonstone/Documents/" #実行するjavascriptのファイル名 jscript = "test.jsx" #ファイルパスを実行するOSの形式で取得 jscript_path = os.path.normcase( os.path.join(mydoc_path,jscript) ) VB_Hub = os.path.normcase( os.path.join(mydoc_path,"VB_Hub.vbs") ) #VBScript経由でjavascriptを実行 subprocess.call("CScript \"" + VB_Hub + "\" \"" + jscript_path +"\" //nologo") 3Dソフトのスクリプトから中継になるVBScriptにjavascriptのファイルパスを引数として渡して 逆に戻り値をjavascriptからVBScript経由で実行元のソフトに戻す方法もあるようですが いかがでしょうか?
|