LoginSignup
2
2

More than 5 years have passed since last update.

Sikuliデモプログラムを作ってみた(キャプチャ編)

Posted at

Sikuliデモプログラムを作ってみた(準備編)
http://qiita.com/miz21358/items/d301297dcb9d925172f6
Sikuliデモプログラムを作ってみた(設定・起動編)
http://qiita.com/miz21358/items/7462bae80494d49dc392

画面キャプチャTips

ソースコードにもコメントですべて記載しています。
GitHubへのリンクは準備編参照。

アプリケーション限定キャプチャ

ウィンドウ全体のキャプチャ

SCREEN.capture()

特定のアプリケーション領域のみをキャプチャしたい場合、範囲を指定してキャプチャができます。
アプリケーションの特定保持は、設定・起動編参照。

capture.py

###-------------
# ブラウザのキャプチャを行う
#
def captureBrowser(params):

    #ブラウザだけを範囲選択し、キャプチャを行う
    #この時点ではテンポラリ等、どこに保存されるかは確実ではない
    tmpPath = SCREEN.capture(params.browserReg.getTopLeft().getX(), \
            params.browserReg.getTopLeft().getY(), \
            params.browserReg.getW(), params.browserReg.getH())

    if isinstance(tmpPath, basestring) == False:
        # 文字列が取得できてない場合、
        # ファイルオブジェクトである可能性があるので、ファイルパスを再取得する
        tmpPath = tmpPath.getFile()

    logger(u"captureTmpPath={0}".format(tmpPath))

    #キャプチャの保存先を取得する
    captureDirPath = params.tree.findtext(u'.//capture/path', None)    
    #キャプチャファイルの画像名を、日時に合わせて修正する
    capturePath = u"{0}{1}{2:%Y%m%d-%H%M%S}.png".format(captureDirPath, os.sep, datetime.datetime.now())
    logger(u"capturePath={0}".format(capturePath))

    #キャプチャファイルを移動する
    os.rename(tmpPath, capturePath)

    #キャプチャファイルフルパスを返す
    return capturePath

params.browserReg … ブラウザアプリケーションの領域(Region)

私の環境では、SCREEN.capture() の return が、キャプチャ画像フルパスの場合と、キャプチャ画像オブジェクトの場合の2パターンが発生しました。
Win7はフルパス、Win10はオブジェクト。OSのバージョンによるのかしら…
なので、パス文字列ではなかった場合、ファイルパスを再取得してます。

SCREEN.capture() した際のキャプチャ画像がどこに置かれるかは、環境に依るようです。
なので、使いやすいところに動かしといた方が後々楽かと思います。

2
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
2
2