작성
·
426
1
안녕하세요 선생님
저는 지난번에 "글자 위에 사진이미지를 겹치고 싶은데 ㅠ 코드로는 어떻게 해야 하나요 ??" 라는 제목의 질문을 올렸던 학생입니다.
이 질문에 답을 얻으려고 제 나름대로... 여기저기 찾아보기도 하고 연구도 해봤지만 결국 끝내 해결하지 못했습니다. 능력부족이라 생각합니다. ㅠㅠ
그래서 염치 불구하고 제가 원하는 기능을 함수로 구현해주실 수 있을런지 부탁드립니다. ㅠㅠ
제가 원하는건 마치 도장을 찍듯이 텍스트 글자 위에 도장모양의 이미지를 겹쳐서 위치시키는 것입니다. ㅠㅠ
알려주신 한컴 개발자 포럼도 전부 뒤져봤지만 C++ 언어로 작성된 코드는 제가 봐도 전혀 모르고 이걸 다시 파이썬 코드로 변환 하는것은 엄두도 안 날 정도로 제 실력이 미천해서 ㅠㅠ
정말 염치불구하고 고개숙여 간곡히 부탁드립니다. ㅠㅠ
미리 감사말씀 고개 숙여 올립니다. ㅠㅠ
감사합니다.
아 그리고 혹여라도 답변을 못주신다고 해서 원망하거나 하진 않습니다. 사실 이건 수업과 관련이 전혀 없는 내용의 요청이고 제가 사실 스스로 해결해야 하는 문제라는 것 잘 알고 있습니다. 다만 이 기능구현을 꼭 하고 싶은데 당장 제 실력이 부족해서 할 수 없으니 요청을 드려본 것일 뿐입니다.
바쁘실거 알고 있기 때문에 답변 못 주신다고 해서 그 어떤 부정적인 생각도 하진 않습니다. 부담가지실까봐 말씀 올렸습니다.
답변 6
2
선생님 계속 징징대기만 하는 것 같아서 참 답답합니다 ㅠ
해결하려고 깃 코파일럿을 유료결제 후 AI의 도움을 받아보았고 당연히 챗 지피티도 사용해서 해결을 해보려고 시도했습니다.
프로그램 개발이 뭔가 짜릿한 맛도 있지만 이렇게 능력부족!으로 막힐땐 정말 가슴까지 답답할정도로 막막하네요 ㅠ
정말 해결하고 싶은데 ㅠㅠ 여기서 도저히 한발자국도 나가지 못하겠습니다. ㅠㅠ
encoding='utf-8'
인코딩 방식을 여러가지로 바꿔 봤지만... 안되더라구요 ㅠㅠ
선생님은 어떻게 이런 막히는 문제를 해결하시나요? 공무원 하시다가 이렇게 능력자가 되실 수 있는 그 비결이 정말 궁금합니다. 대단하신 것 같아 존경스럽습니다. ㅠ
1
안녕하세요ㅎ
우선 이미지 삽입 후 이미지를 원하는 좌표로 이동하는 명령어는 아래와 같습니다.
시연화면을 먼저 보여드리겠습니다.
코드는 아래와 같습니다.
import os
def img_offset(x, y):
hwp.HAction.GetDefault("ShapeObjDialog", hwp.HParameterSet.HShapeObject.HSet)
hwp.HParameterSet.HShapeObject.TextWrap = hwp.TextWrapType("InFrontOfText")
hwp.HParameterSet.HShapeObject.HorzOffset = hwp.MiliToHwpUnit(x)
hwp.HParameterSet.HShapeObject.VertOffset = hwp.MiliToHwpUnit(y)
hwp.HParameterSet.HShapeObject.TreatAsChar = 0
hwp.HParameterSet.HShapeObject.HSet.SetItem("ShapeType", 1)
hwp.HAction.Execute("ShapeObjDialog", hwp.HParameterSet.HShapeObject.HSet)
# 이미지 삽입시 전체경로를 입력해야 함.
hwp.InsertPicture(Path=os.path.join(os.getcwd(), "도장.png"), sizeoption=2)
hwp.FindCtrl()
img_offset(45, 0) # y좌표는 커서 높이를 따라가지만, x좌표는 직접 입력해야 함.
다만, X좌표를 커서와 연동하거나 특정 텍스트의 위치를 추출하는 경우는
구현하고자 하는 목적에 따라 방법이 달라지기 때문에,
조금만 더 구체적으로 상황을 알려주시면
보다 정확한 답변을 드릴 수 있을 것 같습니다.
감사합니다.
1
으악ㅜㅜㅜㅜㅜ
아래 답변은 제가 남긴 게 아니고
아직 조금 미숙한 인프런AI가 남겨준 답변이라서요ㅜㅜㅜㅜㅜㅜㅜ
제가 후다닥 작성하여 답변 남겨드리겠습니다.
잠시만 기다려주세요!!!ㅋ
1
허허허허 ^^
우선 보내주신 코드를 실행해봤습니다.
바로 에러가 나오네요
아래는 제가 수행한 코드입니다.
from PIL import Image, ImageDraw, ImageFont
# 이미지와 텍스트 파일 경로 선언
image_path = r"C:\Users\king\Desktop\프로그램 관련 폴더\05. 자습 학습\[인프런] - 움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 일코\내가 만든 프로그램\assets\주식회사 인.png"
text_path = r"C:\Users\king\Desktop\프로그램 관련 폴더\05. 자습 학습\[인프런] - 움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 일코\내가 만든 프로그램\test.hwp"
# 이미지 열기
image = Image.open(image_path)
# 이미지 위에 텍스트 겹치기
font_path = r"C:\Users\king\Desktop\프로그램 관련 폴더\05. 자습 학습\[인프런] - 움짤로 빠르게 배우는 파이썬-아래아한글 자동화 레시피 - 일코\내가 만든 프로그램\assets\BMEULJIROTTF.ttf"
font_size = 12
draw = ImageDraw.Draw(image)
text_font = ImageFont.truetype(font_path, font_size)
text_content = open(text_path, encoding='cp949').read()
x = 50
y = 50
draw.text((x, y), text_content, font=text_font)
# 이미지 저장하기
image.save("./이미지파일")
우선 우리 선생님께서 만들어주신 코드를 제가 해석한게 맞는지 모르겠지만.
image_path -> 삽입할 이미지 경로
text_path -> hwp 파일의 경로
text_path 경로의 한글 파일에 image_path 이미지를 추가한다.
위 코드를 실행하니 맨 처음 에러 코드가 발생했습니다...
구글링 해본 결과
encoding='cp949'
encoding='utf-8'
encoding='UTF-8'
encoding="ISO-8859-1"
# 위의 인코딩 방식을 각 각 모두 적용해봤지만 역시나 작동하지 않았습니다.
^^ 허허허
따로 시간내서 만들어 주셨는데 안되니까 아쉽네요 ㅠㅠㅠㅠ 말 그대로 떠먹여 줘도 못하네요 ㅋㅋ
아휴 제 실력 문제인거 같아 답답합니다.
그리고 만들어주신 코드를 보고 바로 든 생각인데 x, y 좌표는 어떻게 알아낼 수 있을까요. 지금 생각으론 특정한 누름틀의 위치를 알아내어 그 누름틀의 x, y좌표를 그대로 혹은 일부 수정해서 사용하는 방식으로 코딩하면 될 것 같긴합니다.
아무튼 ㅠㅠ x, y좌표를 정하기 전에 이미지 추가 부터 해야 할텐대 ㅠㅠ
1
선생님 정말 감사합니다.
우선 저는 파이썬(Python) 프로그램을 사용중입니다.
만들어주신 코드를 바로 사용해보고 바로 회신 올리겠습니다. 꾸벅 꾸벅 정말로 진심으로 고개숙여 감사말씀 올립니다.
감사합니다.
0
안녕하세요, 외로운코딩독학님. 저는 인프런 AI 인턴입니다.
지난번 질문에서 글자 위에 사진 이미지를 겹치는 방법에 대해 도움을 요청하셨는데, 아직 해결하지 못하셨다고 하셨군요. 먼저, 열심히 찾아보고 연구하신 노력을 칭찬드립니다. 하지만 여전히 해결책을 찾기 어려우셨다면, 함께 코드로 구현해보는 것도 좋은 방법이 될 수 있을 것 같습니다.
해당 기능을 함수로 구현하기 위해서는 사용하시는 언어에 따라 코드가 달라질 수 있습니다. 혹시 어떤 프로그래밍 언어를 이용하고 계신가요?
만약 파이썬을 사용하신다면, PIL 라이브러리 혹은 OpenCV 라이브러리를 이용하여 이미지를 텍스트 위에 겹치는 방법으로 구현하실 수 있습니다.
먼저, PIL 라이브러리를 사용하신다면, 아래와 같은 코드로 이미지를 텍스트 위에 겹칠 수 있습니다.
from PIL import Image, ImageDraw, ImageFont
# 이미지와 텍스트 파일 경로 선언
image_path = "이미지 파일 경로"
text_path = "텍스트 파일 경로"
# 이미지 열기
image = Image.open(image_path)
# 이미지 위에 텍스트 겹치기
draw = ImageDraw.Draw(image)
text_font = ImageFont.truetype("폰트 파일 경로", 폰트 크기)
text_content = open(text_path).read()
draw.text((x좌표, y좌표), text_content, font=text_font)
# 이미지 저장하기
image.save("결과 이미지 파일 경로")
만약 OpenCV 라이브러리를 사용하신다면, 다음과 같은 코드로 이미지를 텍스트 위에 겹칠 수 있습니다.
import cv2
# 이미지와 텍스트 파일 경로 선언
image_path = "이미지 파일 경로"
text_path = "텍스트 파일 경로"
# 이미지 읽어오기
image = cv2.imread(image_path)
# 이미지 위에 텍스트 겹치기
text_content = open(text_path).read()
cv2.putText(image, text_content, (x좌표, y좌표), 폰트, 폰트 크기, 색상, 두께)
# 이미지 저장하기
cv2.imwrite("결과 이미지 파일 경로", image)
위의 코드에서 x좌표, y좌표는 텍스트를 어디에 위치시킬지에 따라 값을 조정하시면 됩니다. 또한, 폰트 파일 경로, 폰트 크기, 색상 등을 필요에 맞게 조정하셔야 합니다.
소중한 요청에 대한 답변이 되었는지 확신이 서지 않는다면, 더 자세한 요구사항이나 코드를 확인해야 할 것 같습니다. 추가적인 도움이 필요하시다면 언제든지 알려주세요. 좋은 결과를 얻을 수 있기를 바랄게요!