[win32com]PhotoshopをPythonスクリプトで操作する方法


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

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

正直COMが何なのか説明できるほど詳しくないですけど、

「プログラム言語に囚われずアプリケーション間のやり取りを円滑に簡単に?
扱いやすく?する環境?などのマイクロソフトの取り組み」

的な感じでしょうか。


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


※記事の中で紹介した方法を使って実際にPythonでPhotoshopのスクリプトツールを作ってみました。


Pythonのwin32comエクステンションwin32comをダウンロード

 

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

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

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

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

 

PythonスクリプトでPhotoshopの新規作成

早速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 で新規作成できました。
 

Photoshopで新規作成したドキュメントを複製

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

psCom = win32com.client.Dispatch('PhotoShop.Application')
psCom.ActiveDocument.Duplicate() #Duplicate
psCom.ActiveDocument.Duplicate()
アクティブになっている画像をDuplicate複製

実行:
タイトルが「のコピー」となってます。きちんと複製出来ました。

PythonスクリプトでPhotoshopのファイルを開く

今度はファイルを開いてみます。
 
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で対応すれば良いと思います。

Pythonに限らずJavaScriptでも同様ですがプラグインで処理される部分をスクリプトで記述するにはプラグインのコマンドが公開されていないとコードは書くのは困難です。

その様な時はAdobe公式プラグインの ScriptingListener で対応できます。

ScriptingListener でプラグイン処理のログを出力、ログはJavaScriptで記述されているのでスクリプトコードに記述して使うことが出来ます。

[Python] [JavaScript] [ScriptingListener] それぞれ適材適所で使い分けるのが良いのではないでしょうか。

オススメ記事:
Photoshopのスクリプトが書けなくてもScriptingListenerがあれば大丈夫


おすすめの関連記事:

Adobe公式のプラグインでスクリプトを簡単に作る方法の紹介です。
記事中のスクリプトは一切コードを書かずにコピペのみで作りました。


コチラの記事も読まれています

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください