[win32com]PythonからPhotoshopをスクリプトで実行する方法


PythonでPhotoshopを操作することが出来るので紹介したいと思います。

Photoshopは「COMコンポーネント」対応しているのでPythonに限らず色々なプログラム言語で扱えます。

正直COMが何なのか説明できるほど詳しくないですけど、
「プログラム言語に囚われずアプリケーション間のやり取りを円滑に簡単に?扱いやすく?する環境?
などのマイクロソフトの取り組み」的な感じですか。

マイクロソフトの取り組みなのでWindowsでしか扱えませんが、便利そうなので試してみたいと思います。


win32com

pythonでCOMコンポーネントを扱うにはwin32comエクステンション

pywin32が必要になります。gitHubからダウンロードできます。

自分の環境にあったものを選んでダウンロードしてください。
ダウンロードしたら実行します。

「不明な○○」などの質問を乗り越えてインストールします。

新規作成

早速Pythonファイルを用意します。
photoshop_com.pyで保存しました。
import os
import win32com.client

psCom = win32com.client.Dispatch('PhotoShop.Application')
psCom.Documents.Add(320,240)

import win32com.client
win32comのクライアントをインポート

psCom = win32com.client.Dispatch(‘PhotoShop.Application’)
Photoshopを扱うオブジェクト

psCom.Documents.Add(320,240)
新規作成します。

w320,h240 で新規作成できました。

複製

新規作成したドキュメントを複製します。
import os
import win32com.client

psCom = win32com.client.Dispatch('PhotoShop.Application')
psCom.ActiveDocument.Duplicate() #Duplicate
psCom.ActiveDocument.Duplicate()
アクティブになっている画像をDuplicate複製
タイトルが「のコピー」となってます。きちんと複製出来ました。

ファイルを開く

今度はファイルを開いてみます。
import os
import win32com.client

psCom = win32com.client.Dispatch('PhotoShop.Application')
openfile = "C:\\Users\\ユーザー名\\Pictures\\Camera Roll\\DSC00274.JPG"
psCom.Open(openfile)

psCom.Open(openfile)
.Open(ファイルのパス)でファイルを開くことが出来ます。

ファイルが開きました。

開いたファイルにフィルタをかけてみましょう。

フィルタぼかし(ガウス)

import os
import win32com.client

psCom = win32com.client.Dispatch('PhotoShop.Application')

psCom.ActiveDocument.ActiveLayer.ApplyGaussianBlur(40.0)
ボケましたね成功です。

javascriptのコードで実行

.DoJavaScript()でjavascriptで書いたコードが実行できます。
青く塗りつぶしてみます。
import os
import win32com.client

psCom = win32com.client.Dispatch('PhotoShop.Application')

javaScriptCode = """
var RGBColor = new SolidColor();
RGBColor.red = 0;
RGBColor.green = 0;
RGBColor.blue = 255;
activeDocument.selection.selectAll();
activeDocument.selection.fill(RGBColor,ColorBlendMode.NORMAL, 100, false);"""

psCom.DoJavaScript(javaScriptCode)

javaScriptCode = ” ”
にjavascriptで書いて、DoJavaScript()で実行します。

青く塗りつぶされました。

まとめ

Photoshopのスクリプトのリファレンスには、Pythonはもとより
COMコンポーネントに対応した記述はありませんが、Photoshopのスクリプトリファレンスに

[activeDocument.activeLayer]

などと表記されていたら、先頭を大文字にかえて

[ActiveDocument.ActiveLayer]

とすれば、基本的に同じ感覚で使えます。

どうしてもPythonでは困難な部分は[DoJavaScript()]を使ってjavascriptで対応すれば良いと思います。

関連記事:


タグ: , ,