오늘은 파이썬 두 번째 자료를 올려보겠습니다.
woff2 웹폰트를 만들었다고 해서 그냥 사용할 수 있는 것은 아니죠.
이번에는 지난번에 이어서 woff2 폰트를 CSS 파일에 입력하는 코드를 보여드리겠습니다.
뭐, 폰트 파일이 한두 개면 상관없겠지만 그 양이 많다면 font-face를 넣는 것도 시간이 많이 걸리는 작업 중 하나가 될 텐데요.
이 작업을 간편하게 하는 코드입니다.
그럼 한 번 보시죠.
◎ 필요한 사전 준비 과정
- woff2 파일 이름을 한글로 만들어 놓기.
- 파이썬 파일의 내용을 본인 상황에 맞게 수정하기.
◎ 이유 설명
일단 파일은 대부분 띄어쓰기 없는 영문으로 해야 오류가 없다는 걸 아실 겁니다.
그런데 왜 굳이 파일의 이름을 한글로 해야 하는지 설명드리겠습니다.
파일이 많아지면 영문으로 된 파일이 정확히 어떤 폰트인지 알아보기 쉽지 않을 때가 있습니다.
그래서 한글 폰트명을 주석으로 처리해서 한눈에 어떤 폰트 파일인지 알기 쉽게 하기 위함입니다.
아래의 예를 보시죠.
자, 이 파이썬 코드는 한글로 된 파일을 폰트 내부에 입력된 "name_ID"를 읽어서 한글명 폰트를 영문으로 바꿔주며 기존 한글 파일명은 빨간색 글씨의 주석으로 넣어주고 바뀐 영문명은 font-family와 파일명에 각각 넣어 줍니다.
이렇게 하면 어떤 폰트 파일의 링크인지 정말 찾기 쉽겠죠.
무엇보다도 많은 양을 직접 하나하나 하다 보면 오타를 낼 수 있지만 이렇게 자동화하면 틀릴 염려도 없습니다.
그래서 굳이 파일의 이름을 한글로 바꾸라는 말씀을 드린 겁니다.
◎ 사용법
아래 코드를 복사해서 메모장에 붙여 넣고 "파일명.py"로 저장을 하세요.
코드 내부에서 "경로"라고 된 곳과 "파일명.css" 부분은 본인에 맞게 수정을 하시면 됩니다.
from fontTools.ttLib import TTFont
from tkinter import filedialog
import tkinter as tk
import os
def get_font_fullname(woff2_filename, target_name_id=1):
try:
font = TTFont(woff2_filename)
name_table = font['name']
full_name = None
for record in name_table.names:
if record.nameID == target_name_id:
full_name = record.toUnicode()
break
return full_name
except Exception as e:
print(f"오류: {e}")
return None
def rename_font_file(woff2_filename, new_filename):
try:
os.rename(woff2_filename, new_filename)
print(f"변경된 폰트 파일 이름: {new_filename}")
except Exception as e:
print(f"폰트 파일 이름 변경 오류: {e}")
def save_rename_log(original_filename, renamed_filename):
# 원래 파일 이름과 확장자 가져오기
original_filename_with_extension, extension = os.path.splitext(original_filename)
log_entry = f"""@font-face {{
font-family: '{renamed_filename}'; /* {original_filename_with_extension} */
src: url('경로/{renamed_filename}/{renamed_filename}.woff2') format('woff2');
}}
"""
log_filename = "파일명.css"
try:
with open(log_filename, 'a') as log_file:
log_file.write(log_entry)
print(f"다음 위치에 font-face 항목 저장됨: {log_filename}")
print()
except Exception as e:
print(f"font-face 항목 저장 오류: {e}")
def main():
root = tk.Tk()
root.withdraw()
while True:
woff2_filename = filedialog.askopenfilename(
title="WOFF2 폰트 파일 선택",
filetypes=[("WOFF2 파일", "*.woff2"), ("모든 파일", "*.*")]
)
if not woff2_filename:
print("프로그램이 종료되었습니다.")
break
font_fullname = get_font_fullname(woff2_filename, target_name_id=1)
print(f"실제 폰트 이름: {font_fullname}")
if font_fullname:
font_fullname = font_fullname.replace(" ", "_")
directory, filename = os.path.split(woff2_filename)
new_filename = os.path.join(directory, f"{font_fullname}{os.path.splitext(filename)[1]}")
try:
rename_font_file(woff2_filename, new_filename)
save_rename_log(filename, f"{font_fullname}")
except Exception as e:
print(f"오류 발생: {e}")
if __name__ == "__main__":
main()
자, 위 코드를 실행하게 되면 다음과 같은 창이 뜹니다.
◎ 마치며
현재 제 블로그에 상업용 무료 폰트를 올리다 보니 처리할 파일의 개수가 꽤 많습니다.
그렇다 보니 손이 꽤 많이 가는 건 어쩔 수 없는 상황인데요.
그나마 손이 덜 가게 만들어 줄 파일을 하나 만들어 놓으면 꽤 많은 시간을 세이브할 수 있어서 만들 때는 조금 고생도 하고, 시간도 들긴 하지만 막상 만들어 놓으면 잘했다 싶은 생각도 듭니다.
이 파일은 많은 분들이 사용하실 일은 없겠지만 그래도 한 분이라도 도움이 된다면 그걸로 만족합니다.
다음에는 woff2 파일을 체크해 볼 수 있는 파일을 올려 보겠습니다.
대단한 건 아니고, woff2를 변환했다고 모든 폰트가 정상적으로 나오란 보장이 없거든요.
이럴 때 많은 폰트가 웹(html) 상에 제대로 나오는지 빠르게 확인할 수 있는 파이썬 코드를 올려보겠습니다.