이북 캡쳐 매크로 - ibug kaebchyeo maekeulo

PC/모바일 안드로이드 ebook 캡쳐 10

12

2022-04-16 05:38:07 수정일 : 2022-04-16 13:24:42 114.♡.174.246

저는 종이책을 선호해 ebook을 안보지만, 안드로이드 장치에서 ebook 사용중 불편한 점 중 하나가 앱에서 캡쳐가 안되는데,

에뮬에서는 제약이 없어 PC에 블루스택을 깔고 해당 앱을 실행후 캡쳐를 하면 잘됩니다.

블루스택에서 네이버 시리즈, 리디, Play북을 픽픽을 이용해 캡쳐해 봤습니다.

- 블루스택은 세로모드에서 해당 이북을 열고 적당한 화면 사이즈로 조절후, 

  픽픽에서 윈도우컨트롤캡쳐 (ctrl+prtsc)를 이용해 원하는 만큼 캡쳐후 파일>다른 이름으로 저장>모든파일저장..(저장파일종류 및 연속파일저장이름 지정)

  예전에 나온 이북들은 엉망인 경우가 많아 스캔테일러로 적당히 여백 및 보정작업을 하거나, 

  검색가능하도록 OCR을 하면 좀더 활용성이 좋아질 것 같습니다.

  (아이패드 이북 캡쳐해 활용하는 동영상이 많은 것을 보아 ebook을 개인적인 용도로만 사용시 별 문제 없을 것으로 추정됩니다)

유트뷰에 훨씬 좋아보이는 게 있네요..(자동화에 pdf합치기까지 있네요..)

* 네이버 소프트웨어 자료등록(추가내용)

//infinitt.tistory.com/292

(pyinstaller , virusTotal, trojan) 파이썬 매크로 프로그램 - 네이버 소프트웨어 자료등록

//infinitt.tistory.com/291 " data-og-description="* 목적 아이패드를 산김에 ebook을 구매해보았다. 교보문고에서 구매했는데, 파일을 저작권 문제 때문인지 자사에서 제공하는 어플리케이션으로만 열리

infinitt.tistory.com

(결론은 실패했다는 내용)

* 목적

아이패드를 산김에 ebook을 구매해보았다. 교보문고에서 구매했는데, 파일을 저작권 문제 때문인지 자사에서 제공하는 어플리케이션으로만 열리게 해놓았다. 근데,, 교보eBook 이라는 어플리케이션이 별점 1점답게 필기기능조차 제공하지 않았다. 나는 문제집을 샀는데.... 그래서 예전부터 한번 해봐야지 해봐야지 하던 파이썬 라이브러리를 사용하여 매크로를 만들어 보았다.

* 프로그램 다운로드

맨 위에 링크를 참고하면 알겠지만 프로그램 인증서, 전자서명이 없어 위험한 파일이라고 경고창이 발생할 수 있다. (하지만 악성코드는 없다!!)

//github.com/Youjunyong/ebook_to_pdf

GitHub - Youjunyong/ebook_to_pdf: html , js , css using local storage

html , js , css using local storage. Contribute to Youjunyong/ebook_to_pdf development by creating an account on GitHub.

github.com

*사용한 라이브러리

pyautogui - > 매크로 작동부분, 마우스와 키보드 조작해준다.

pyqt5 -> Gui를 구현한다.

pynput -> 마우스 리스너를 통해, 마우스 위치 좌표값을 읽을 수 있다. 

pyinstaller -> 파이썬이 없는 컴퓨터에서도 작동 가능하도록 exe파일로 만들어 준다. (window환경에서만 실행가능)

*Pyqt5 _Gui 프로그램 모습

실행파일이다. 아이콘은 power point에 있는 이미지로 만들었다. 

생긴건 보잘것 없지만,, 원하는 내가 필요로하는 기능을 한다는것에 만족했다. 

* 사용방법

1. 캡쳐할 페이지 수를 입력한다.

2. 캡쳐할 이미지 영역의 좌측상단, 그리고 우측 하단을 클릭하여 프로그램에 좌표를 입력해준다.

3. 다음페이지 버튼도 마찬가지 방법으로 입력해준다.

4. 프로그램이 로딩시간까지 계산하여, 다음페이지 버튼을 누르고 0.8초 후에 선택한 영역을 캡쳐하여 순서대로 저장한다. 그리고 목표 페이지수 만큼 이것을 반복한다.

5. 이미지는 PNG, 그리고 이름은 0.png, 1.png, 2.png, 3.png 와 같은 규칙으로 저장된다. 윗부분에 PDF만들기를 누르면 파일 다이어로그가 나오고, 파일을 선택하여 넣어주면 파일이름 순서대로 PDF로 합쳐진다.

저장된 이미지
합쳐진 PDF

이로써 필기가 안되는 Ebook에 필기를 할 수 있게 되었다.

*Python code
import sys from PyQt5.QtWidgets import QProgressBar,QMainWindow, QFileDialog,QInputDialog, QApplication, QWidget, QPushButton, QToolTip, QAction, qApp, QFileDialog from PyQt5.QtGui import QIcon import pyautogui import time from pynput import mouse import PyQt5 from PIL import Image page = 0 # 찍을 페이지 수 picture_size = [] #왼쪽 상단 좌표 , 오른쪽 하단 좌표 next_page = [] #다음 페이지의 좌표 msg = "순서대로 진행하세요. 버튼에 마우스를 올리면 설명이 나옵니다." def get_mouse_point(x, y, button, pressed): if pressed and button==mouse.Button.left: print('입력받은 좌표 : ', (x, y)) picture_size.append(x) picture_size.append(y) return False def png_to_pdf(fname): imglist = [] for idx, file in enumerate(fname): globals()['img_{}'.format(idx)] = (Image.open(file)).convert("RGB") imglist.append(globals()['img_{}'.format(idx)]) img_0.save('New_pdf.pdf',save_all=True, append_images=imglist) def get_next_page(x, y, button, pressed): if pressed and button==mouse.Button.left: next_page.append((x, y)) return False class MyApp(QMainWindow): def __init__(self): super().__init__() self.initUI() def initUI(self): self.setWindowTitle('Ebook_To_Pdf') self.statusBar().showMessage(msg) #--------ProgressBar self.pbar = QProgressBar(self) self.pbar.setGeometry(30, 300, 200, 40) self.pbar.setValue(0) # 앞의 두 매개변수는 창의 x, y 위치를 결정하고, 뒤의 두 매개변수는 각각 창의 너비와 높이를 결정합니다. openFile = QAction('Open', self) openFile.setShortcut('Ctrl+O') openFile.setStatusTip("open new file") openFile.triggered.connect(self.show_file) menubar = self.menuBar() menubar.setNativeMenuBar(False) filemenu = menubar.addMenu('&★PDF로 변환하기') filemenu.addAction(openFile) page_btn = QPushButton('1.캡쳐할 페이지 수', self) page_btn.resize(page_btn.sizeHint()) page_btn.move(30, 50) page_btn.clicked.connect(self.page_input) btn_start_point = QPushButton('2.좌측 상단 좌표 저장', self) btn_start_point.setToolTip('이미지의 좌측 상단 꼭지점에 마우스를 올리고, 클릭합니다.') btn_start_point.move(30,100) btn_start_point.resize(btn_start_point.sizeHint()) btn_start_point.clicked.connect(self.Event_start_point) btn_end_point = QPushButton('3.우측 하단 좌표 저장', self) btn_end_point.setToolTip('이미지 우측 하단 꼭지점에 마우스를 올리고, 클릭합니다.') btn_end_point.move(30,150) btn_end_point.resize(btn_end_point.sizeHint()) btn_end_point.clicked.connect(self.Event_end_point) btn_next_page = QPushButton('4.다음 페이지 버튼 좌표 저장', self) btn_next_page.setToolTip('다음 이미지로 넘길 버튼에 마우스를 올리고, 클릭합니다.') btn_next_page.move(30,200) btn_next_page.resize(btn_next_page.sizeHint()) btn_next_page.clicked.connect(self.Event_next_page) btn_run = QPushButton('5.실행하기', self) btn_run.setToolTip('화면 그대로 찍힙니다. 다른 프로그램이 이미지를 가리지 않도록 해주세요.') btn_run.move(30, 250) btn_run.resize(btn_run.sizeHint()) btn_run.clicked.connect(self.get_picture) self.setGeometry(400,400,500,500) self.show() def page_input(self): global page , picture_size picture_size = [] page, ok = QInputDialog.getText(self, 'Input Dialog', '찍을 페이지 수:') if ok: page = int(page) msg = "찍을 페이지 수 : %d, 예상 소요시간 : %f초"%(page, page*0.8) self.status(msg) self.pbar.setValue(15) def show_file(self): fname = QFileDialog.getOpenFileNames(self, 'Open file' , './') fname[0].sort() if fname[0]: png_to_pdf(fname[0]) def status(self,msg): self.statusBar().showMessage(msg) def Event_start_point(self): with mouse.Listener(on_click=get_mouse_point) as listener: listener.join() msg = "좌측 상단 좌표 : (%s, %s)"%(picture_size[0],picture_size[1]) self.status(msg) self.pbar.setValue(30) def Event_end_point(self): with mouse.Listener(on_click=get_mouse_point) as listener: listener.join() msg = "우측 하단 좌표 : (%s, %s)"%(picture_size[0],picture_size[1]) self.status(msg) self.pbar.setValue(45) def Event_next_page(self): with mouse.Listener(on_click=get_next_page) as listener: listener.join() msg = "'다음페이지'버튼 좌표 : %s"%next_page self.status(msg) self.pbar.setValue(60) def get_picture(self): rest_of_percent = 40//page for i in range(page): if len(picture_size) >= 4: pyautogui.screenshot("%s.png" % i, region=(picture_size[0], picture_size[1], picture_size[2]-picture_size[0],picture_size[3]-picture_size[1])) pyautogui.click(*next_page) rest_of_percent += 40//page self.pbar.setValue(60+rest_of_percent) time.sleep(0.8) self.pbar.setValue(100) msg = "이미지 캡쳐 완료. PDF메뉴를 눌러 PDF로 변환하세요!" self.status(msg) if __name__ == '__main__': app = QApplication(sys.argv) ex = MyApp() sys.exit(app.exec_())

리디북스, 예스24 등의 프로그램은 자체적으로 캡쳐 기능을 막아놓았습니다. 이러한 경우에는 캡쳐가 되지 않으므로 참고해주세요.

불법 용도로는 사용하지 말아주시길...

Toplist

최신 우편물

태그