일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Codeforces
- Firefox
- heroku
- PostgreSQL
- terraform
- 프로그래머스 월간 코드 챌린지 시즌1
- Python
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- 프로그래머스 월간 코드 챌린지
- 애드센스
- 프로그래머스 코딩테스트 연습문제
- FastAPI
- git
- pycharm
- Spring Boot
- 클린 코드
- 바이오데이터 엔지니어
- 디자인 패턴
- selenium
- github
- WPF
- 파이썬
- 프로그래머스 코딩테스트 연습
- 스코페2021
- Word Cloud
- c#
- github actions
- PostgreSQL 설치 시 에러
- 브랜디
- 프로그래머스 코딩 테스트 연습
- Today
- Total
프로그래밍 연습하기
파이썬으로 특정 폰트의 글자를 이미지로 만들기 본문
어떤 글자를 이미지로 얻으려고 하는데
폰트의 저작권이 있으니까 아무거나 가져와서 쓰기는 좀 그렇더라구요.
그래서 저작권 문제 없는 폰트를 찾아 이미지로 만들기로 했습니다.
몇 글자 정도면 그냥 어디에 작성을 해서 그것을 캡쳐해서 가져올 수도 있겠지만
만약 많은 문자를 얻어야 한다고 하면 귀찮은 일이 되기도 하고
이미지 편집 프로그램은 많이 사용 해 본 적이 없어서
프로그래밍으로 간단하게 할 수 있는 방법을 찾아봤습니다.
그래서 찾은 것이 파이썬의 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
더 나아가 원하는 폰트의 한 글자뿐만 아니라 다양한 문장을 이미지로 만들어 볼 수도 있을 것 같습니다.
'Python' 카테고리의 다른 글
Venv가 활성화 되어도 경로 인식을 못할 때 (0) | 2021.06.08 |
---|---|
Pycharm Pytest 관련 에러 및 설정 (0) | 2021.05.17 |
파이썬 Defaultdict (0) | 2021.04.01 |
파이썬 에러 Convert UTF-8 with BOM to UTF-8 with no BOM in Python 해결 (0) | 2020.11.24 |
Openpyxl 하이퍼링크 넣기 (0) | 2020.09.29 |