본문 바로가기
** My Projects

파이썬으로 화면 캡처 프로그램 만들기 - 개인프로젝트 03

by 심코딩 2022. 7. 4.

오늘은 저번에 이어서 세번째 프로젝트 진행과정 공유이다.

 

 

파이썬으로 화면 캡처 프로그램 만들기 - 개인프로젝트 01

회사에서 업무를 하다 보면 가끔 정말 짜증 날때가 있다. 업무를 하다 보면 화면 내에 있는 특정 부분을 캡처해서 메일로 발송 한다던지, 내가 따로 사용을 해야 하는 경우가 굉장히 빈번하게 발

s1mcoding.tistory.com

 

파이썬으로 화면 캡처 프로그램 만들기 - 개인프로젝트 02

이전 포스팅에 이어서 오늘도 개인프로젝트 진행하고 있는거에 대해 포스팅 해보려 한다. 파이썬으로 화면 캡처 프로그램 만들기 - 개인프로젝트 01 회사에서 업무를 하다 보면 가끔 정말 짜증

s1mcoding.tistory.com

저번 포스팅 마지막에 적은 이번 포스팅에 내가 이뤄야할 목표는 두가지 였다.

 

  • 지금 현재 상황으로는 전체 모니터 캡처가 된부분이 D 드라이브에 저장이 되어있다. 해당을 삭제할 수 있는 방법을 알아봐야 겠다.
  • 그 다음 이제 event를 이용하여 키보드 명령어를 입력했을 때 크롭핑이 실행이 되도록 진행을 할 예정이다

 

결론부터 말하자면 성공이다.

 

파일을 삭제하는건 os 모듈을 통해 굉장히 쉽게 진행이 된다는걸 알았다.

내가 진행을 한건, 전체 화면을 캡처한후 그 이미지를 저장해두고, 그 이미지를 저장한다음 캡처를 하고, 캡처를 한 이미지를 저장을 하면서 전체화면 캡처한것을 지우는 거였다.

 

이거 말고 다른 방법은 아직까지 생각은 나지 않았고, 현재 실행이 멀쩡하게 잘 되고 있으니 굳이 바꿀 필요가 있나 싶다.

 

또한 두번째 event 진행은 gui없이 진행을 하기에는 조금 아직 벅차서 간단한 gui를 tkinter를 이용해 만들었다.

그러고 버튼에 bind를 통해 event 실행이 되게 하였다.

 

 

 

 

간단하다, 버튼을 클릭한 후 내가 입력한 명령어 (현재는 Shift + Z 이다.) 를 누른 후 원하는 부분을 클릭 클릭을 하면 자동으로 해당 좌표로 직사각형을 만든 후 캡처가 된다.

 

또한 캡처가 되면 미리보기 화면이 나오면서 저장한 폴더까지 바로 나온다. 즉 만약 캡처한 부분을 따로 저장할 필요도 없고, 저장 경로를 매번 안해도 된다. 만약 이메일로 첨부를 해야 하는 상황이면 바로 캡처한 후 이메일로 드래그를 할 수 있도록 만들었다.

 

업데이트된 코드는 아래와 같다.

 

import pyautogui
import tkinter as tk
from pynput.mouse import Listener
import keyboard
from PIL import Image
import os

def cropping(event):   
    coord = []
    # saving screenshot image to D drive
    myScreenshot = pyautogui.screenshot()
    myScreenshot.save('D:/myscreenshot.jpg')
    im = Image.open(r'D:/myscreenshot.jpg')
    # getting mouse coordinates when mouse click.
    def click(x,y,buton,pressed):
        if pressed:
            x = int(x)
            y = int(y)
            coord.append(x)
            coord.append(y)
            if len(coord) == 4:
                return False
    with Listener(on_click = click) as listener:
        listener.join()
        
    left = coord[0]
    top = coord[1]
    right = coord[2]
    bottom = coord[3]
    im1 = im.crop((left,top,right,bottom))
    os.remove('D:/myscreenshot.jpg')
    os.startfile('D:/')
    im1.show()
    im1.save('D:/cropped.jpg')

#GUI
root = tk.Tk()
root.title('BetterWork')
canvas1 = tk.Canvas(root, width = 400, height = 100)
canvas1.pack()

def crop():
    if onButton['text'] == 'OFF':
        onButton['text'] = 'ON'
        onButton['bg'] = 'blue'
        root.bind('<Shift-Z>', cropping)
    else:
        root.unbind('<Shift-Z>')
        onButton['text'] = 'OFF'
        onButton['bg'] = 'red'
        
onButton = tk.Button(text = 'OFF', command = crop, bg='red', fg='white', font=15, width=25)
canvas1.create_window(200, 50, window = onButton)

root.mainloop()

 

이제 거의 막바지에 접어들긴 하였다.

 

마지막으로 해야 되는 것은

 

  • 해당 프로그램이 계속 백그라운드에서 실행이 가능하도록 하기
  • 실제 일반 윈도우에 기본 탑재되어있는 캡처프로그램과 얼마나 효율에서 차이가 날지
  • 해당 코드의 프로그램화

이 외에는 계속해서 gui 부분을 건들면 될 것 같다. gui에서 아무래도 자기가 원하는 명령어로 바꿀 수 있다거나, 파일경로를 바꿀 수 있는건 설정해둬야 하지 않나 싶다.

댓글