4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Takumi Akashiro ひとりAdvent Calendar 2020

Day 10

PythonからCOMオブジェクトを扱う / HoudiniからPhotoshopをちょっと操作する

Last updated at Posted at 2020-12-11

この記事はTakumi Akashiro ひとり Advent Calendar 2020の10日目の記事です。

今日はHoudiniからPhotoshopを起動して操作します。
興味のある方はどうぞ。

始めに

pythonでCOMオブジェクトを使いたい瞬間はありませんか?
ありませんね。エクセルとか操作したくなったら、pyWin32とか使うし……
いやでも、pyWin32ってDCCツールに組み込みずらいし……と嘆いている方に朗報です!

簡単にCOMオブジェクトを扱える拡張モジュールがあるんです!
その名もcomtypes


comtypes · PyPI

comtypes は、ctypes FFI ライブラリをベースにした Python の軽量な COM パッケージで、
10000 行以下のコードで構成されています (テストはカウントされていません)。

ビルドされたバイナリも使っておらず、依存関係も標準モジュール以外はないので、
DCCツールにも組み込みやすいのもいいですね。

通常の導入方法

いつも通りpip install comtypesですね。

MayaとかHoudiniとか

pip install -t <pythonpath> comtypes
で適当なパスが通ったディレクトリにインストールします。

無法ですが、Zipを落としてきて、展開して適切なフォルダを適当に投げ入れても動きます。
というか、今後pipで管理する予定が無いなら、不要なegg-infoとかbinフォルダはいらないので、
pipを使わずに適当に入れたほうが無駄なファイルは減りますね。

3系は元の構文が2系ベースで書かれていて、そのままだとSyntaxErrorで動かないので、
pipを通すか自前で2to3をかける必要がありました。

無法なことをやるなら、まあsetup.pyには目を通しておいたほうがいいとは思いますね。

試す

ではHoudiniからPhotoshopをCOMオブジェクト経由で起動し、適当なファイルを保存するスクリプトを試してみます。

#!python
# encoding:utf-8

import comtypes.client
import gc

def main():
    photoshop = comtypes.client.CreateObject("Photoshop.Application")
    document = photoshop.Documents.Add()

    color = comtypes.client.CreateObject("Photoshop.SolidColor")
    color.RGB.Red = 255
    color.RGB.Green = 0
    color.RGB.Blue = 0

    document.Selection.SelectAll()
    document.Selection.Fill(color)

    document.SaveAs("D:\COMControl_Sample.psd")
    photoshop.Quit()

    # 関数が終了すればオブジェクトが破棄されて、
    # 解放されると思うが、念のために明示的にガベコレする。
    del photoshop, document, color
    gc.collect()


main()

10_01.gif

出来ましたね!DドライブにPSDファイルができてます。

締め

最初はCOMオブジェクトを簡単に使える拡張モジュールを紹介するつもりだったんですが、
調べて記事に起こしていくうちに、思った以上に有用になってしまって自分でもびっくりしています。

……PhotoshopってCOMオブジェクト経由でコントロールできるんですね…初めて知ったわ…

追記

でもPhotoshopをPythonから操作するなら、正直にphotoshop-python-apiを使うほうがいいかもですね……
photoshop-python-api · PyPI

こっちもrequirementsを読む限りはcomtypesを使ってるみたいですん。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?