- 세상의 모든 계산기 자유(질문) 게시판 팁 & 정보 ()
(프로그램) 계산기 폰트를 이미지로 저장하는 python 프로그램
import os
import tkinter as tk
from tkinter import filedialog
from PIL import Image, ImageDraw, ImageFont
from fontTools.ttLib import TTFont
def create_character_images(font_path, output_folder, output_height=32):
# 폰트 파일 로드
font_size = output_height * 2 # 초기 폰트 크기를 출력 높이의 2배로 설정
font = ImageFont.truetype(font_path, font_size)
ttfont = TTFont(font_path)
# 출력 폴더 생성
os.makedirs(output_folder, exist_ok=True)
# 폰트에서 사용 가능한 모든 문자 추출
characters = set()
for table in ttfont['cmap'].tables:
for char_code, char_name in table.cmap.items():
if char_code < 0x10000: # Unicode 범위 내의 문자만 처리
characters.add(chr(char_code))
# 각 문자에 대해 이미지 생성
for char in characters:
# 문자의 크기 측정
left, top, right, bottom = font.getbbox(char)
width = max(1, right - left)
height = max(1, bottom - top)
# 여유 공간 추가
padding = font_size // 20 # 폰트 크기의 5%를 패딩으로 사용
width += padding * 2
height += padding * 2
# 이미지 생성
img = Image.new('RGBA', (width, height), (255, 255, 255, 0))
draw = ImageDraw.Draw(img)
# 문자 그리기
draw.text((padding - left, padding - top), char, font=font, fill=(0, 0, 0, 255))
# 여백 제거
bbox = img.getbbox()
if bbox:
img = img.crop(bbox)
else:
continue # 빈 이미지인 경우 건너뛰기
# 높이를 32픽셀로 조정하면서 비율 유지
if img.height > 0:
new_height = output_height
new_width = max(1, int(img.width * (new_height / img.height)))
img = img.resize((new_width, new_height), Image.LANCZOS)
else:
continue # 높이가 0인 경우 건너뛰기
# 이미지 저장
filename = f"{ord(char):04X}.png"
img.save(os.path.join(output_folder, filename))
print(f"{output_folder}에 생성된 이미지: {len(characters)}개")
# 파일 선택 대화상자 표시
root = tk.Tk()
root.withdraw() # 기본 창 숨기기
font_path = filedialog.askopenfilename(
title="폰트 파일 선택",
filetypes=[("TrueType Font", "*.ttf"), ("All Files", "*.*")]
)
if font_path:
# 출력 폴더 생성
font_dir = os.path.dirname(font_path)
font_name = os.path.splitext(os.path.basename(font_path))[0]
output_folder = os.path.join(font_dir, font_name)
create_character_images(font_path, output_folder, output_height=32)
else:
print("폰트 파일이 선택되지 않았습니다.")
1. 실행
2. .ttf 폰트 파일 선택
3. 선택한 폰트 파일이 있는 곳 아래에 폰트파일명의 폴더가 생성됨
4. 폰트 이미지가 png 파일로 저장됨 : 배경(background) 없음.
댓글4
-
세상의모든계산기

버튼 안쪽은 색이 칠해지는게 좋을 것 같기도 한데...
일단은 이걸로 만족합니다.
예전에 폰트 설치하고,
문서 보면서
-> 포토샵에서 키 하나씩 눌러가며 이미지 만들고
-> 크기 맞춰서 저장하고
-> 또 리사이즈하고
하나하나 삽질하면서 만들었던 기억이 나는데
인공지능 시대가 좋네요.
프로그램 찾는 것보다도 빠르게 맞춤형으로 만들어주니...
* 사이트에 올릴 때는 파일명 순서로 나와서,
계산기 버튼 배치에 맞게 파일명은 노가다로 수정해 주어야 합니다.
-

세상의모든계산기 님의 최근 댓글
[fx-570 CW] 와의 차이 CW에 【×10x】버튼이 사라진 것은 아닌데, 버튼을 누를 때 [ES][EX] 처럼 특수기호 뭉치가 생성되는 것이 아니고, 【×】【1】【0】【xㅁ】 버튼이 차례로 눌린 효과가 발생됨. ※ 계산 우선순위 차이가 발생할 수 있으므로 주의. 괄호로 해결할 것! 2026 01.18 26년 1월 기준 국가 전문자격 종류 가맹거래사 감정사 감정평가사 검량사 검수사 경매사 경비지도사 경영지도사 공인노무사 공인중개사 관광통역안내사 관세사 국가유산수리기능자(24종목) 국가유산수리기술자 국내여행안내사 기술지도사 농산물품질관리사 물류관리사 박물관 및 미술관 준학예사 변리사 사회복지사 1급 산업보건지도사 산업안전지도사 세무사 소방시설관리사 소방안전교육사 손해평가사 수산물품질관리사 정수시설운영관리사 주택관리사보 청소년상담사 청소년지도사 한국어교육능력검정시험 행정사 호텔경영사 호텔관리사 호텔서비스사 2026 01.17 국가전문자격 2026 01.17 991CW+ KR 버전이 나오면, 그 때는 (어쩔 수 없이) CW 를 추천하게 될지도 모르겠습니다. 2026 01.14 참고리뷰 : https://www.reddit.com/r/calculators/comments/1o7kj7f/casio_fx9910cw_review_a_much_needed_improvement/ 카시오 FX-9910CW 리뷰: 절실히 필요했던 개선이지만… 너무 늦은 감이 있는 걸까? 2026 01.13