タイトルの通り。
いままでTwitter等でSSを公開するとき、プリントスクリーンでスクリーンショットを撮り、それをペイントに貼り付けてトリミングしていた。
だがいちいちそれをやるのは面倒くさい、ということでpythonで一発でやれるようにしようや、というのが動機になる。
以下コード。
# coding:utf-8 # Project_SS from StringIO import StringIO import win32clipboard as cb from PIL.BmpImagePlugin import DibImageFile import sys cb.OpenClipboard() if not cb.IsClipboardFormatAvailable(cb.CF_DIB): print u'クリップボードに画像がありません。' sys.exit() imgData = cb.GetClipboardData(cb.CF_DIB) imgFile = StringIO(imgData) img = DibImageFile(imgFile) box= (560, 187, 1360, 667) #ブラウザの画面中艦これ部分の座標の指定。解像度によるのかな? output_img = img.crop(box) output_img.save('[保存する画像のパス。任意で指定。]','JPEG')
まずはこちらを参考にさせていただき、クリップボードの画像を取得するコードを書いてみた。ところが「from BmpImagePlugin import DibImageFile」の部分でエラーが出る。Pythonで何か書こうとするとimportでまず躓くのは仕様か。
というわけでGoogle先生を使って探索するとこちらを発見。どうやら「PIL.」をつければいいらしい。
更にプリントスクリーンによるスクリーンショット(つまり画面全体)から艦これ部分をトリミングすべく、検索。そしてここにたどり着いたので、組み合わせてみる。
艦これ部分の座標取得のためにMPP Utilityを使った。これはコード内にコメントで書いたように、解像度によって違うのかもしれない。もし上のコードでうまくいかなければ、MPP Utilityで艦これ部分の左上(x1,y1)、右下の座標(x2,y2)を取得し、box=(x1,y1, x2,y2)と指定すればOKだ。
今後の発展方向としては、取得した艦これ部分の画像をmatplotlibか何かで表示して、更に一部分だけをトリミングできるようにする、とかできたらいいなあ、と思っている。
ただし、思っているだけでやるとは言っていない。使ってみてそういう機能が欲しいと思えばやるし、思わなければやらない。予想だが、多分やらないんだろう。