pythonで画面キャプチャーツールを作ってみよう(1)

 

最近はpythonが流行りのようで、管理人igazeeyも使い始めました。
pythonの良さは、手軽さと豊富なライブラリだと思います。
型宣言無しで変数が使えますし、class的にも class無しでも書けます。
何はともあれ、実際に何かを作ってみるのが1番です。
という訳で画面キャプチャーツールを作ってみることにします。
pythonで画面キャプチャーをする方法はいくつかありますが、
ImageGrabというライブラリを使ってみましょう。
キモの部分は次のようになります。

#! /usr/bin/python3

from PIL import Image,ImageGrab

img=ImageGrab.grab(bbox=(200,100,400,250))
img.save("sample.png")

これは、画面の(200,100)-(400,250)の領域をキャプチャーして
sample.png というファイル名で保存するプログラムです。
たったこれだけ、実質2行。簡単ですね。
注意点としては、bboxで与える座標が (x0,y0)-(x1,y1)であることです。
x1やy1がx0,y0より小さいとエラーになります。
※ Pillowのインストールや、実行属性の与え方、実行方法などは割愛。
わからなければ検索してみてください。

キャプチャー領域の指定が埋め込みなので、別の範囲をキャプチャー
したい時は、bboxの指定値を書き直す必要があります。
これを実行時に引数で指定できるようにしてみましょう。

#! /usr/bin/python3

import sys
from PIL import Image,ImageGrab

if len(sys.argv) < 3 :
    print('Usage: {} geometry filename'.format(sys.argv[0]))
    print(' geometry="{ww}x{hh}+{x0}+{y0}  ex. "200x100+80+30"')
    sys.exit(0)

p=sys.argv[1].split('+')
x0=int(p[1])
y0=int(p[2])
wh=p[0].split('x')
ww=int(wh[0])
hh=int(wh[1])
img=ImageGrab.grab(bbox=(x0,y0,x0+ww,y0+hh))
img.save(sys.argv[2])

上記をexam1.py などの名前で保存して
python3 exam1.py 300×100+80+120 savename.png
などとして実行します。300×100+80+120 というのは geometry指定で
幅(=300)x高さ(=100)+左上X座標(=80)+左上Y座標 (=120)を指定しています。
pythonの引数は sys.argv で得られます。sys.argv[0]が自分自身の
プログラム名、sys.argv[1]が第一引数(geometry指定)、sys.argv[2]が
第二引数(保存ファイル名)です。
プログラムでは、このgeometry指定(argv[1])を’+’で分割(split)して
p[0]=”300×100″
p[1]=”80″
p[2]=”120″
を得て、次にp[0]を’x’で分割して 幅(ww=300)と高さ(hh=100)を得ています。

エラー処理としては、引数の不足チェックだけしかしていません。
geometryの指定が正しくない時はpythonがエラーを吐くので、
それが嫌な人は自前でエラー処理を追加してください。
まだこの状態ではツールというには貧弱なので、tkinterというGUIライブラリを
使ってそれっぽくして行くことにします(次回に続く)。

この記事へのコメントはこちら

メールアドレスは公開されませんのでご安心ください。
また、* が付いている欄は必須項目となりますので、必ずご記入をお願いします。

内容に問題なければ、下記の「コメント送信」ボタンを押してください。

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)