- 세상의 모든 계산기 자유(질문) 게시판 팁 & 정보 ()
(프로그램) 계산기 폰트를 이미지로 저장하는 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
-
세상의모든계산기

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

세상의모든계산기 님의 최근 댓글
진짜 색약 안경은 비싸서 살 생각은 없고, 알리에서 싸구려 구매해서 테스트 해 봤습니다. 프로그램과 비슷한 효과가 있고, (프로그램과 비교해서) 알리 싸구려 렌즈가 - 숫자 구분이 아주 약간 더 잘 되고 - 붉은 색상이 더 밝습니다. 채도가 높다고 해야하는 것 같네요. 주의할 점은 알리 색약 안경은 일상용으로는 절대 사용 불가입니다. - 내부 빛반사 방지 코팅이 없어서 내 눈알이 렌즈에 비치고, 그래서 실제로 보여야 할 것과 섞여 보입니다. - 필터 코팅도 최악이라서 중심부(=마젠타) 주변부(=노랑)으로 서로 다르게 색이 들어옵니다. 전반적으로 그라데이션 발생. - 외부에서 봤을 때 렌즈색이 튀기 때문에, 티가 많이 납니다. - 색 구분 면에서는 도움이 될 수도 있지만, 녹색(특정 파장)이 차단되어 LED 신호등의 녹색이 잘 안보일 수 있습니다. 2025 12.24 교점이 2개 이상일때 모든 값을 구하는 법 계산기마다 가능/불가능이 갈릴 수도 있습니다. ㄴ fx-570 의 solve 는 무조건 한번에 하나씩 찾습니다. 따라서, 2차 3차 방정식처럼 규격화된 수식은 solve 대신 EQN 모드에서 답을 구하는게 좋습니다. ㄴ TI-nspire 같은 CAS 계산기의 solve 는 수식에 따라서 여러개가 한꺼번에 찾아지기도 합니다. https://allcalc.org/3448 ㄴ fx-9860G 의 solve는 무조건 1개, solveN 는 수식에 따라 여러개가 찾아질 수 있습니다. https://allcalc.org:443/board_casio/6005#comment_15889 가능하다면, 불확실할때는 그래프로 확인하세요. 2025 12.16 T가 410인 해를 찾는 방법 -> 초기값을 입력하세요. [공학용 계산기] 공학용 계산기의 꽃? solve (솔브) 기능 이해하기 (Newton-Raphson 법, 뉴튼법) https://allcalc.org/11532 2025 12.16 참고 - [공학용 계산기] 정적분 계산 속도 벤치마크 비교 https://allcalc.org/9677 2025 12.11 다른 계산기의 경우와 비교 1. TI-nspire CAS ㄴ CAS 계산기는 가능한 경우 부정적분을 먼저하고, 그 값에 구간을 대입해 최종값을 얻습니다. ㄴ 부정적분이 불가능할 때는 수치해석적 방법을 시도합니다. 2. CASIO fx-991 ES Plus ㄴ CASIO 계산기의 경우, 적분할 함수에 따라 시간이 달라지는 것으로 알고 있는데, 정밀도를 확보할 별도의 알고리즘을 채택하고 있는 것이 아닐까 생각되네요. 2025 12.11