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

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

세상의모든계산기 님의 최근 댓글
참고 - [공학용 계산기] 정적분 계산 속도 벤치마크 비교 https://allcalc.org/9677 2025 12.11 다른 계산기의 경우와 비교 1. TI-nspire CAS ㄴ CAS 계산기는 가능한 경우 부정적분을 먼저하고, 그 값에 구간을 대입해 최종값을 얻습니다. ㄴ 부정적분이 불가능할 때는 수치해석적 방법을 시도합니다. 2. CASIO fx-991 ES Plus ㄴ CASIO 계산기의 경우, 적분할 함수에 따라 시간이 달라지는 것으로 알고 있는데, 정밀도를 확보할 별도의 알고리즘을 채택하고 있는 것이 아닐까 생각되네요. 2025 12.11 일반 계산기는 보통 리셋기능이 따로 없기 때문에, 다른 요인에 영향을 받을 가능성은 없어 보이구요. '원래는 잘 되었는데, 지금은 설정 값이 날아간다'면 메모리 값을 유지할만큼 배터리가 꾸준하게 공급되지 않기 때문일 가능성이 높다고 봐야겠습니다. - 태양광이 있을 때는 계산은 가능하지만, 서랍등에 넣으면 배터리가 없어서 리셋 https://blog.naver.com/potatoyamyam/223053309120 (교체 사진 참조) 1. 배터리 준비: * 다이소 등에서 LR54 (LR1130) 배터리를 구매합니다. (보통 4개 들이 1,000원에 판매됩니다. LR44와 높이가 다르니 혼동하시면 안됩니다.) 2. 준비물: * 작은 십자드라이버 (계산기 뒷면 나사용. 이것도 없으시면 다이소에서...) 3. 커버 분해: * 계산기 뒷면의 나사를 풀고, 머리 부분(윗부분)의 커버를 조심스럽게 분해합니다. (참고해주신 블로그 사진을 보시면 이해가 빠르실 겁니다.) 4. 배터리 교체: * 기존 배터리를 빼냅니다. * 새 LR54 배터리의 '+'극 방향을 정확히 확인하여 제자리에 넣어줍니다. (대부분의 경우 '+'극이 위로 보이도록 넣습니다.) 5. 조립: * 커버를 다시 닫고 나사를 조여줍니다. * 블로그 사진을 보니 배터리 연결선 등이 눌려서 씹혀 있네요. 원래 씹히도록 설계를 안하는데, 원래 그렇게 만들어 놓은 건지? 모르겠네요. 여튼 씹히면 단선될 가능성이 있으니, 잘 보시고 플라스틱 틈새 등으로 적절히 배치해서 안씹히게 하는 것이 좋습니다. 6. TAX 재설정: * 계산기의 전원을 켜고 TAX 요율을 10%로 다시 설정합니다. 2025 12.10 TI-nspire 입력 방법 solve({x+a+b=5,x)|a=1 and b=2 2025 12.01 질문하실 때는 항상 계산기 모델명을 정확하게 적으셔야 합니다. 2025 12.01