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

[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複製

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

更新:複数のPhotoshopをインストールしているPCでエラーが返される場合の対処法

複数のバージョン又は、複数のビットバージョンのPhotoshopをインストールしていると、場合によってはエラーが返されるかも知れません。

この場合のエラーを回避する為には、どのバージョンのPhotoshopなのかを指定する必要があります

Photoshopのバージョンは「2021」のような表に示されている数字ではなく、win32.client.Dispatchで指定するアプリケーションのバージョンなのですが、その番号はどこで確認できるのでしょう。

win32.client.Dispatchで指定するアプリケーションのバージョンは「Windowsのレジストリエディター」で確認できます。

タスク バーの検索ボックスに 「regedit」と入力し、結果から 「レジストリ エディター」をクリック、起動します。

エディターが開いたら左側のツリーで「HKEY_CURRENT_USER」もしくは「HKEY_LOCAL_MACHINE」を探しクリック。

ツリーの下層から SOFTWARE > Adobe > Photoshop を見つけてクリック。

そこに[150.0]のような数字があればそれがバージョン番号です。
(PhotoshopCC 2021は150.0のようです)

win32com_photoshop_ver



見つけたバージョン番号を使用してコードを修正します。

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

これで複数のPhotoshopがインストールされてる場合のエラーは回避されると思います。


※Photoshopのバージョン確認で参考にしたサイト:Tech Art Tiki
>>http://techarttiki.blogspot.com/2008/08/photoshop-scripting-with-python.html

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のjavascriptについて体系的にまとめられて書かれた数少ない日本語の書籍





𝕏 ( 旧Twitter ) Facebook Pocket LINE はてブ

おすすめの関連記事



あわせてよく読まれている記事

コメントを残す

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

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