본문 바로가기
아래아한글 자동화/python+hwp 중급

[QnA] 이미지 수백개를 삽입할 때 파이썬 for문으로 넣으면 너무 느려요!

by 일코 2022. 1. 24.
제목: [문의] 파이썬에서 한글자동화 그림삽입 다이알로그 API 사용 방법 도움 요청

회사원 코딩님,
블로그에 공개된 InsertPicture 이용 한글자동화 소스 코드를 통해 많은 도움 받고 있습니다.

오늘은 실례를 무릅쓰고 방명록 대신 메일로 아래 내용 관련 조언 구하고자 합니다. 
(1)입력 메뉴에 있는 그림(P) PictureInsertDialog 호출하여 
(2)특정 위치(디렉토리)에 있는 
(3)모든 image(PNG) 파일을 Ctrl+A 선택하여 
(4)일시에 한글 파일에 넣고자 합니다.

InsertPicture의 경우 한 개의 파일만 삽입 가능한데 for loop 문을 사용하여 많은 양의 image 파일을 반복하여 삽입할 경우 다소 시간이 소요되더군요. 그리고 InsertPicture 파일 인자로 리스트(디렉토리명과 파일명으로 이루어진 리스트)를 넘기면 에러가 발생하였습니다.

PictureInsertDialog에서 지원되는 동시 파일 선택 삽입을 통해 시간을 절약하고자 관련 API를 이용하는 방법 조언 구합니다.

고맙습니다.

독자님께서 위와 같은 문의를 주셨습니다.

 

우선 InsertPicture 메서드는 리스트나 배열을 받을 수 없습니다. API 매뉴얼에도 문자열 자료형을 받는다고 명시되어 있기 때문입니다. 또한 복수의 이미지를 동시에 삽입하는 메서드도 없습니다.

 

그렇다고 이에 대한 해법이 없는 것은 아닌데, 한/글에서 직접 여러 개의 이미지를 삽입하는 것보다 훨씬 빠르게 파이썬에서 삽입하는 방법이 있습니다.

 

그것은, 한/글을 백그라운드로 숨긴 상태에서 for문으로 이미지를 삽입하는 것입니다. (너무 싱겁나요...?)

 

다양한 용량의 이미지 170여개를 골라놓았습니다.

각각 삽입에 소요되는 시간을 한 번 측정해보겠습니다.

 

1. 한/글에서 직접 삽입하는 방법부터 재보겠습니다.

"열기"를 누른 직후부터 4.2초 소요되었습니다.

이미지를 선택한 후 "열기" 버튼을 누른 시점부터 측정을 시작했고, 약 4.2초 정도 소요되었습니다.

 

2. 한/글 창을 보이게 한 상태에서 이미지를 삽입하는 경우입니다.

for문으로는 8.3초 걸렸네요.

time.time()으로 측정해보니 직접삽입보다 두 배 느린 8.3초 정도가 소요되었습니다.

 

3. 이제 한/글 창을 숨긴 후 삽입해보겠습니다. (이게 1번 케이스보다 훨씬 빠릅니다.)

약 2.5초 소요됩니다.

파이썬으로 삽입하는 게 일반적으로는 더 느리지만,

이렇게 화면을 숨기고 삽입하면, 렌더링(?)에 소요되는 연산이 빠져서

훨씬 속도가 빨라집니다. 이번 케이스는 2배 가까이 빨라졌네요.

비단 이미지 삽입뿐만 아니라, 셀에 특정 값을 삽입하거나, 누름틀에 텍스트를 넣거나 하는 등

다수의 반복연산이 필요한 경우라면

이렇게 한/글 창을 숨기고 코드를 실행하는 게 훨씬 속도가 빠릅니다.

몇 년 전 파이콘 발표 때에도 숨기고 작업하는 속도와 보이게 작업하는 속도의 차이를 보여드린 적이 있었습니다.

 

마지막으로 한/글 창을 숨기는 코드는 아래와 같습니다. (기본적으로 백그라운드에서 실행되기도 하고요.)

hwp.XHwpWindows.Item(0).Visible = False  # True를 입력하면 숨김해제.

 

부디, 독자님의 작업에 도움이 되었기를 바랍니다.

감사합니다.

댓글