프로그래밍 연습하기

파이썬으로 특정 폰트의 글자를 이미지로 만들기 본문

Python

파이썬으로 특정 폰트의 글자를 이미지로 만들기

john.k 2021. 4. 12. 15:16
반응형

어떤 글자를 이미지로 얻으려고 하는데

폰트의 저작권이 있으니까 아무거나 가져와서 쓰기는 좀 그렇더라구요.

그래서 저작권 문제 없는 폰트를 찾아 이미지로 만들기로 했습니다.

 

몇 글자 정도면 그냥 어디에 작성을 해서 그것을 캡쳐해서 가져올 수도 있겠지만

만약 많은 문자를 얻어야 한다고 하면 귀찮은 일이 되기도 하고

이미지 편집 프로그램은 많이 사용 해 본 적이 없어서

프로그래밍으로 간단하게 할 수 있는 방법을 찾아봤습니다.

 

그래서 찾은 것이 파이썬의 Pillow(PIL)라이브러리 입니다.

PIL(Python Imaging Library)은 예전부터 있던 라이브러리인데,

현재는 지원이 중단되고 PIL을 포크하여 지금까지 유지 보수되는 Pillow 라이브러리가 사용되고 있습니다.

 

from PIL import ImageFont, ImageDraw, Image

for title in ["hiragana", "katakana"]:
    jpn = []
    eng = []
    with open(title + ".txt", "r", encoding="utf-8") as f:
        data = f.readlines()
        for d in data:
            d = d.replace("\n", "")
            if len(d) > 1:
                d = d.split()
                jpn.append(d[0])
                eng.append(d[1])
                
    for j, e in zip(jpn, eng):
        #배경 이미지의 크기
        W, H = (200, 200) 
        #배경 이미지를 흰색으로 하여 생성
        image = Image.new('RGB', (W, H), (255, 255, 255)) 
        #해당 폰트와 사이즈 설정
        font = ImageFont.truetype("Tanugo-TTF-Regular.ttf", 100) 
        #이미지 생성
        draw = ImageDraw.Draw(image) 
        #글자의 크기
        w, h = draw.textsize(j, font=font) 
        #배경 이미지와 글자의 크기를 이용하여 배경 중간에 글자 배치
        draw.text(((W - w) / 2, (H - h) / 2), j, fill="black", font=font) 
        #이미지 저장
        image.save(f"./{title}/{e}.jpg")

 

위의 예시 코드는 일본어 글자를 이미지로 만든 코드입니다.

원본 텍스트는

일본문자 영어발음

이런 식으로 저장되어 있습니다.

 

코드의 흐름을 간단하게 설명해보면

hiragana.txt 파일을 불러와서

일본 글자와 영어 발음을 분리해서 저장하고

그 글자 하나하나를 영어 발음.jpg 이미지로 저장합니다.

그리고 katakana.txt 파일도 마찬가지로 작업합니다.

 

처음에 만들었을 때 폰트 위치가 애매해서 고민했는데 

스택오버플로에서 방법을 찾아보니

배경과 폰트의 크기를 이용해서 중앙에 위치시킬 수 있었습니다.

https://stackoverflow.com/questions/1970807/center-middle-align-text-with-pil

 

Center-/middle-align text with PIL?

How would I center-align (and middle-vertical-align) text when using PIL?

stackoverflow.com

 

더 나아가 원하는 폰트의 한 글자뿐만 아니라 다양한 문장을 이미지로 만들어 볼 수도 있을 것 같습니다.

 

반응형
Comments