【Python】 指定したエリアの画像を保存するソフトウェア 【tkinter】

tkinter

デスクトップ画面上で、透明ウィンドウを使ってエリアを指定すると、ボタン1つで指定エリアの画像を切り出してキャプチャできるソフトウェアです。(こんなソフトウェアがあるとよいなと思うものを Python で作りました。)

以下の環境で動作確認をしています。
環境: Windows 10, Python3 (pyautogui とtkinter を使っています。)

背景

機械学習などでよく知られているように、Python は簡単なスクリプトを書くだけでかなり高度な自動処理が可能となります。
そこで一例として、Windows 画面上で領域を指定してボタンをクリックすると、指定領域の画像を切り出して自動で保存するスクリプトを作りましたので、公開します。
もともとは自分のパソコン作業を効率化するために作りましたが、効率化につながりそうなものを順次、公開します。

設定方法

① デスクトップ等に area_capture1.py 等のテキストファイルを作ってください。
② ①のテキストファイルに下記のスクリプトをコピー&ペーストで貼りつけて保存してください。

使い方

③ コマンドプロンプトなどから、②の Python スクリプトを実行してください。
④ 画像をキャプチャしたい領域に、透明ウィンドウの矩形のエリアを合わせてください。
⑤ [capture] ボタンをクリックしてください。Python スクリプトを入れたフォルダ内に画像が保存されます。

まとめ

ウィンドウ上の画像についても自由にキャプチャして保存できるようになりました。
たとえば、ネット上のプレゼン資料や、YouTube の画面など、指定箇所を連続でキャプチャしておきたいときに活用できると思います。

pyautogui、tkinter、scikit-learn などを使った自動化ツールなどを他にも作成しています。
もしも関心があるようでしたら、関連リンクなども参考にしてみてください。効率化を進めましょう!

関連リンク
・ キーコードとマウス座標を取得する 【Python】
・ クリップボードの画像・テキストを自動保存するソフトウェア 【Python】
・ ファイル名を一括変換する 【Python】
・ テキストボックスとボタンの使い方 【tkinter】

サンプルコード:指定エリアの画像を切り出して保存する

import os 
import tkinter as tk1 
import datetime as dt1 
import pyautogui as pag1 
import cv2 

def set_area1(): 
    a1 = frame2.geometry().strip().replace( "x", " " ).replace( "+", " " ).split( " " ) 
    a2 = [0,0,0,0] 
    a2[0] = str( int( a1[2] ) +10 )
    a2[1] = str( int( a1[3] ) +38 )
    a2[2] = str( int( a1[0] )  -2 ) 
    a2[3] = str( int( a1[1] )  -2 ) 
    str2 = " ".join( a2 ) 
    textbox1.delete( 0, tk1.END ) 
    textbox1.insert( 0, str2 ) 
    frame2.attributes( "-alpha", 1.0 ) 
    frame2.attributes( "-transparentcolor", "white" ) 
    str3 = dt1.datetime.now().strftime( "%Y%m%d_%H%M%S" ) + ".png" 
    textbox2.delete( 0, tk1.END ) 
    textbox2.insert( 0, str3 ) 

def click1(): 
    set_area1() 
    a1 = textbox1.get().strip().split( " " ) 
    img1 = pag1.screenshot( region=(int(a1[0]), int(a1[1]), int(a1[2]), int(a1[3])) )  # x, y, w, h 
    path1 = os.path.dirname(__file__) + "\\" 
    file1 = path1 + textbox2.get().strip() 
    img1.save( file1 ) 
    return 1 

frame1 = tk1.Tk()
frame1.title("area_capture v0.1")
frame1.geometry('350x70+1000+100')
frame1.grid()

btn1 = tk1.Button(frame1, text='capture', command=click1, bg='#F9A0A0')
btn1.place(x=220, y=20, width=120)

textbox1 = tk1.Entry(master=frame1)
textbox1.place(x=20, y=100, width=200) 
textbox1.insert(0, "") 

textbox2 = tk1.Entry(master=frame1)
textbox2.place(x=20, y=20, width=180) 
textbox2.insert(0, "") 

frame2 = tk1.Toplevel()

frame2.title("area")
frame2.geometry('800x500+100+100')
frame2.attributes("-alpha", 0.5 ) 
frame2.config(bg="white") 

frame2.grid()
frame2.lift() 

frame1.mainloop()

タイトルとURLをコピーしました