parent
738969dfd4
commit
77d08b11e8
15259
appTranslator.log
15259
appTranslator.log
File diff suppressed because it is too large
Load Diff
|
|
@ -23,10 +23,34 @@ class base64TOImage:
|
|||
self.logger.debug(f"클립보드 데이터를 가져오는 중 오류 발생: {e}")
|
||||
return None
|
||||
|
||||
# def set_image_to_clipboard(self, image):
|
||||
# """이미지를 클립보드에 넣는 함수 (Windows 전용)"""
|
||||
# output = BytesIO()
|
||||
# image.save(output, "BMP")
|
||||
# data = output.getvalue()[14:] # BMP 헤더 제거
|
||||
# output.close()
|
||||
|
||||
# # 클립보드에 이미지 데이터 넣기
|
||||
# win32clipboard.OpenClipboard()
|
||||
# win32clipboard.EmptyClipboard()
|
||||
# win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
|
||||
# win32clipboard.CloseClipboard()
|
||||
|
||||
def set_image_to_clipboard(self, image):
|
||||
"""이미지를 클립보드에 넣는 함수 (Windows 전용)"""
|
||||
"""이미지를 클립보드에 넣는 함수 (Windows 전용, 5% 크롭 후)"""
|
||||
# 이미지의 크기 계산 (5% 크롭)
|
||||
width, height = image.size
|
||||
left = width * 0.05
|
||||
top = height * 0.05
|
||||
right = width * 0.95
|
||||
bottom = height * 0.95
|
||||
|
||||
# 5% 크롭 적용
|
||||
cropped_image = image.crop((left, top, right, bottom))
|
||||
|
||||
# 이미지를 BMP 형식으로 변환하여 클립보드에 넣기
|
||||
output = BytesIO()
|
||||
image.save(output, "BMP")
|
||||
cropped_image.save(output, "BMP")
|
||||
data = output.getvalue()[14:] # BMP 헤더 제거
|
||||
output.close()
|
||||
|
||||
|
|
@ -36,6 +60,9 @@ class base64TOImage:
|
|||
win32clipboard.SetClipboardData(win32clipboard.CF_DIB, data)
|
||||
win32clipboard.CloseClipboard()
|
||||
|
||||
self.logger.debug("5% 크롭된 이미지가 클립보드에 저장되었습니다.")
|
||||
|
||||
|
||||
def base64_to_image(self, base64_data):
|
||||
"""Base64 데이터를 이미지로 변환하는 함수"""
|
||||
if base64_data.startswith('data:image'):
|
||||
|
|
@ -91,6 +118,35 @@ class base64TOImage:
|
|||
self.logger.debug("이미지 다운로드 최대 재시도 횟수를 초과했습니다.")
|
||||
return None
|
||||
|
||||
# def process_clipboard(self, original_url):
|
||||
# """클립보드의 내용을 처리하고, 필요한 경우 이미지 변환 또는 URL 이미지 복사"""
|
||||
# clipboard_data = self.get_clipboard_data()
|
||||
|
||||
# if clipboard_data.startswith('data:image'):
|
||||
# # 클립보드에 있는 Base64 데이터를 이미지로 변환
|
||||
# image = self.base64_to_image(clipboard_data)
|
||||
# if image:
|
||||
# self.logger.debug("Base64 이미지 변환 성공, 클립보드에 다시 저장 중...")
|
||||
# self.set_image_to_clipboard(image)
|
||||
# self.logger.debug("이미지가 클립보드에 저장되었습니다.")
|
||||
# else:
|
||||
# self.logger.debug("Base64 이미지 변환 실패.")
|
||||
|
||||
# elif clipboard_data.strip() == "html > whale-ocr":
|
||||
# # 'html > whale-ocr' 감지 시 원본 이미지 URL에서 이미지를 다운로드하여 클립보드에 복사
|
||||
# if original_url:
|
||||
# image = self.download_image_from_url(original_url)
|
||||
# if image:
|
||||
# self.logger.debug("원본 이미지 다운로드 성공, 클립보드에 다시 저장 중...")
|
||||
# self.set_image_to_clipboard(image)
|
||||
# self.logger.debug("원본 이미지가 클립보드에 저장되었습니다.")
|
||||
# else:
|
||||
# self.logger.debug("원본 이미지 다운로드 실패.")
|
||||
# else:
|
||||
# self.logger.debug("원본 이미지 URL을 찾을 수 없습니다.")
|
||||
# else:
|
||||
# self.logger.debug("클립보드에 Base64 이미지나 'html > whale-ocr' 데이터가 없습니다.")
|
||||
|
||||
def process_clipboard(self, original_url):
|
||||
"""클립보드의 내용을 처리하고, 필요한 경우 이미지 변환 또는 URL 이미지 복사"""
|
||||
clipboard_data = self.get_clipboard_data()
|
||||
|
|
@ -117,5 +173,30 @@ class base64TOImage:
|
|||
self.logger.debug("원본 이미지 다운로드 실패.")
|
||||
else:
|
||||
self.logger.debug("원본 이미지 URL을 찾을 수 없습니다.")
|
||||
|
||||
elif clipboard_data:
|
||||
# 클립보드 내용이 이미지인 경우, 이미지 크기를 검사
|
||||
image = self.base64_to_image(clipboard_data)
|
||||
if image:
|
||||
width, height = image.size
|
||||
self.logger.debug(f"클립보드에 있는 이미지 크기: {width}x{height}")
|
||||
|
||||
# 이미지가 가로나 세로 중 하나라도 200픽셀 이하인 경우 원본 이미지 다운로드
|
||||
if width <= 200 or height <= 200:
|
||||
if original_url:
|
||||
self.logger.debug(f"이미지 크기가 {width}x{height}로 200픽셀 이하입니다. 원본 이미지 다운로드 중...")
|
||||
original_image = self.download_image_from_url(original_url)
|
||||
if original_image:
|
||||
self.logger.debug("원본 이미지 다운로드 성공, 클립보드에 다시 저장 중...")
|
||||
self.set_image_to_clipboard(original_image)
|
||||
self.logger.debug("원본 이미지가 클립보드에 저장되었습니다.")
|
||||
else:
|
||||
self.logger.debug("원본 이미지 다운로드 실패.")
|
||||
else:
|
||||
self.logger.debug("원본 이미지 URL을 찾을 수 없습니다.")
|
||||
else:
|
||||
self.logger.debug("이미지 크기가 200픽셀 이상입니다. 처리할 필요가 없습니다.")
|
||||
else:
|
||||
self.logger.debug("클립보드에 있는 데이터는 이미지가 아닙니다.")
|
||||
else:
|
||||
self.logger.debug("클립보드에 Base64 이미지나 'html > whale-ocr' 데이터가 없습니다.")
|
||||
|
|
|
|||
|
|
@ -327,7 +327,7 @@ class BrowserController:
|
|||
self.switch_to_chrome() # 크롬으로 포커스 이동
|
||||
base64toimage.process_clipboard(url) # 클립보드 내용이 base64일 경우 이미지로 변환
|
||||
pyautogui.hotkey('ctrl', 'v') # 클립보드 이미지 붙여넣기
|
||||
pyautogui.press('enter') # 엔터 키 입력
|
||||
pyautogui.press('right') # 오른쪽 입력
|
||||
self.logger.debug("이미지 붙여넣기 완료.")
|
||||
except Exception as e:
|
||||
self.logger.debug(f"이미지 붙여넣기 중 오류: {str(e)}")
|
||||
|
|
@ -344,7 +344,8 @@ class BrowserController:
|
|||
def go_to_next_page(self):
|
||||
"""다음 페이지로 이동"""
|
||||
try:
|
||||
next_button = self.page.query_selector('li.ant-pagination-item-next')
|
||||
next_button = self.page.query_selector('li.ant-pagination-next button.ant-pagination-item-link')
|
||||
|
||||
if next_button:
|
||||
next_button.click()
|
||||
self.page.wait_for_load_state('domcontentloaded')
|
||||
|
|
|
|||
30
main.py
30
main.py
|
|
@ -1,16 +1,36 @@
|
|||
import ctypes
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from gui import TranslationApp
|
||||
from logger_module import setup_logger
|
||||
|
||||
# 절전모드를 방지하는 설정 값
|
||||
ES_CONTINUOUS = 0x80000000
|
||||
ES_SYSTEM_REQUIRED = 0x00000001
|
||||
|
||||
def prevent_sleep():
|
||||
"""절전모드 방지를 위해 시스템 설정을 변경"""
|
||||
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS | ES_SYSTEM_REQUIRED)
|
||||
|
||||
def allow_sleep():
|
||||
"""절전모드 방지 설정을 해제"""
|
||||
ctypes.windll.kernel32.SetThreadExecutionState(ES_CONTINUOUS)
|
||||
|
||||
def main():
|
||||
# 로깅 설정
|
||||
logger = setup_logger('default_logger', f'appTranslator.log')
|
||||
|
||||
# PyQt5 앱 실행
|
||||
app = QApplication([])
|
||||
window = TranslationApp(logger) # 로거를 TranslationApp에 전달
|
||||
window.show()
|
||||
app.exec_()
|
||||
# 절전모드 방지 활성화
|
||||
prevent_sleep()
|
||||
|
||||
try:
|
||||
# PyQt5 앱 실행
|
||||
app = QApplication([])
|
||||
window = TranslationApp(logger) # 로거를 TranslationApp에 전달
|
||||
window.show()
|
||||
app.exec_()
|
||||
finally:
|
||||
# 앱 종료 시 절전모드 방지 해제
|
||||
allow_sleep()
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
|
|
|
|||
Loading…
Reference in New Issue