안녕하세요?
일상의코딩입니다. 잘들 지내시는지요?
저는 최근 정말정말 운좋게 다양한 일들을 경험하고 있습니다.
이야기보따리는 다음에 풀 기회가 있으면 꺼내놓겠습니다.
이번 시간에는 한/글에서 제공하는 다양한 방식의 메서드 중
가장 간편한 한줄명령어(Run)와 파이썬을 이용해서
응용프로그램을 하나 만들어보겠습니다.
이름하여, "한/글 문서에 포함된 그림들 화질저하 없이 이미지파일로 저장하는 프로그램"입니다.
실제로 한/글 문서에 삽입한 이미지를 화질저하 없이 그대로 이미지파일로 저장하려면,
아래와 같은 작업을 거쳐야 합니다.
1. 이미지를 선택한다.
2. 이미지를 "원래 크기"로 변경한다.
3. 우클릭(또는 다양한 방법)으로 저장한다.
왜냐면, 한/글2020 전의 버전 어딘가까지는
문서 내 삽입된 해상도의 이미지 그대로 저장하기를 누르면
해상도와 이미지 품질이 저하되는 현상이 발생했고요.
한/글 2020 이상의 버전부터는 용량뻥튀기(?) 현상이 발생하고 있는데요.
이건 무슨 신박한 버그인지 먼저 한 번 보여드리겠습니다.
[1/3]문서에 아래와 같은 이미지를 삽입해보겠습니다.
삽입한 모습은 아래와 같습니다.
[2/3] 이미지를 image01.png라는 이름의 이미지로 다시 저장해보겠습니다.
[3/3] 저장한 이미지의 용량을 확인해봅시다.
다른 이미지로도 테스트를 몇 번 더 해 보았습니다.
해상도는 동일한테 용량만 괜히 7배로 커지는 마법(==버그)!
우리의 원드라이브와 구글포토는 소중하니까,
이런 작업을 자주 하시는 분들은 이 문제를 두고만 볼 수는 없겠죠?
파이썬 코드를 알려드리기 전에,
수작업으로는 이미지 저장시 이 문제를 어떻게 해결할 수 있을까요?
가장 가볍게 해결할 수 있는 방법은
저장하기 전에 "원래 크기"로 이미지 사이즈를 되돌린 후에 저장하면
문제가 발생하지 않습니다.
이 작업을 파이썬 코드로 한 번 옮겨보겠습니다.
한/글 문서에서 이미지를 자주 추출하시는 분들은 제일 아랫쪽에
컴파일한 실행파일이 있으니 다운받아서 실행하시거나,
파이썬을 다루시는 분들이라면, 바로 아래의 코드를 직접 실행해보셔도 좋습니다.
1. 파이썬 코드 - 한/글문서 이미지 추출기
import os
import win32com.client as win32
def 한글파일열기():
한글 = win32.gencache.EnsureDispatch("hwpframe.hwpobject")
한글.XHwpWindows.Item(0).Visible = True
한글.RegisterModule("FilePathCheckDLL", "FilePathCheckerModule")
한글_팝업(한글, "이미지를 추출할 한/글 파일을 선택해주세요.")
한글.Run("FileOpen") # 파일선택 팝업창을 열어서 추출할 한/글파일을 선택합니다.
return 한글
def 그림추출(경로, 확장자):
한글.HAction.GetDefault("PictureSave", 한글.HParameterSet.HShapeObjSaveAsPicture.HSet)
한글.HParameterSet.HShapeObjSaveAsPicture.Path = 경로
한글.HParameterSet.HShapeObjSaveAsPicture.Ext = 확장자
한글.HAction.Execute("PictureSave", 한글.HParameterSet.HShapeObjSaveAsPicture.HSet)
def 한글_팝업(한글, 문자열):
메시지박스 = 한글.XHwpMessageBox
메시지박스.string = 문자열
메시지박스.DoModal()
def 이미지추출():
한글.Run("MoveDocEnd")
이미지번호 = 1
while True:
try:
# 현재위치 = 한글.GetPos()
한글.Run("SelectCtrlReverse")
if 한글.CurSelectedCtrl.CtrlID == "gso": # 이미지이면
한글.Run("PictureToOriginal") # 원래 크기로
그림추출(os.path.join(os.getcwd(), f"한글이미지{이미지번호}.jpg"), "jpg")
이미지번호 += 1
# if 한글.GetPos() == 현재위치:
# break
except AttributeError:
break
if __name__ == '__main__':
한글 = 한글파일열기()
이미지추출()
한글_팝업(한글, "이미지 추출작업을 완료하였습니다.")
한글.Clear(1)
한글.Quit()
2. 컴파일된 실행파일(윈도우)
※ 유의사항
위 코드는 튜토리얼을 위해 1차적으로 간략히 제작한 버전임을 밝힙니다.
현재 프로그램으로는 이미지가 표 안에 들어있는 경우에
이를 추출하지 못하는 버그가 있습니다.
이를 보완하는 방법은 다음 포스팅에서 상세히 다루겠습니다.
이번 포스팅은 여기서 마칩니다.
감사합니다. 행복한 하루 되세요!
신명진 드림
'아래아한글 자동화 > python+hwp 중급' 카테고리의 다른 글
hwp파일 열 때 한/글 자체 다이얼로그를 이용하면 qt도 tkinter도 필요없다!? (0) | 2022.04.09 |
---|---|
선택한 특정 구간만 새로운 파일로 저장하는 함수 만들기 (0) | 2022.03.13 |
한/글 문서 이미지 사이즈를 문서여백에 맞춰 일괄조정 및 캡션 유지하는 방법 (6) | 2022.02.10 |
댓글