[파이썬] 폰트의 이름 변경 및 CSS에 @font-face 자동으로 넣기

오늘은 파이썬 두 번째 자료를 올려보겠습니다.

woff2 웹폰트를 만들었다고 해서 그냥 사용할 수 있는 것은 아니죠.

이번에는 지난번에 이어서 woff2 폰트를 CSS 파일에 입력하는 코드를 보여드리겠습니다.

뭐, 폰트 파일이 한두 개면 상관없겠지만 그 양이 많다면 font-face를 넣는 것도 시간이 많이 걸리는 작업 중 하나가 될 텐데요.

이 작업을 간편하게 하는 코드입니다.

그럼 한 번 보시죠.









◎ 필요한 사전 준비 과정

  1. woff2 파일 이름을 한글로 만들어 놓기.
  2. 파이썬 파일의 내용을 본인 상황에 맞게 수정하기.

 


◎ 이유 설명

일단 파일은 대부분 띄어쓰기 없는 영문으로 해야 오류가 없다는 걸 아실 겁니다.

그런데 왜 굳이 파일의 이름을 한글로 해야 하는지 설명드리겠습니다.

파일이 많아지면 영문으로 된 파일이 정확히 어떤 폰트인지 알아보기 쉽지 않을 때가 있습니다.

그래서 한글 폰트명을 주석으로 처리해서 한눈에 어떤 폰트 파일인지 알기 쉽게 하기 위함입니다.

아래의 예를 보시죠.


@font-face { 
       font-family: 'YEONGJUPunggiGinseng'; /* 영주풍기인삼체 */ 
       src: url('경로/YEONGJUPunggiGinseng.woff2') format('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"를 더블 클릭합니다.


검은 창에 변환된 내용과 파일명이 AndongKaturi.woff2로 바뀐 걸 볼 수 있습니다.


나머지도 변환해 봤습니다.
파일이 많다면 계속 변환할 파일을 더블 클릭해주면 됩니다.
더 이상 변환할 파일이 없다면 그냥 창을 닫아주면 됩니다.


바로 만들어진 CSS 파일의 내용입니다.
파일이 많아도 걱정이 없습니다. 
계속해서 변환한 파일의 내용이 자동으로 누적되게 됩니다.





◎ 마치며

현재 제 블로그에 상업용 무료 폰트를 올리다 보니 처리할 파일의 개수가 꽤 많습니다.

그렇다 보니 손이 꽤 많이 가는 건 어쩔 수 없는 상황인데요. 

그나마 손이 덜 가게 만들어 줄 파일을 하나 만들어 놓으면 꽤 많은 시간을 세이브할 수 있어서 만들 때는 조금 고생도 하고, 시간도 들긴 하지만 막상 만들어 놓으면 잘했다 싶은 생각도 듭니다.

이 파일은 많은 분들이 사용하실 일은 없겠지만 그래도 한 분이라도 도움이 된다면 그걸로 만족합니다.


다음에는 woff2 파일을 체크해 볼 수 있는 파일을 올려 보겠습니다.

대단한 건 아니고, woff2를 변환했다고 모든 폰트가 정상적으로 나오란 보장이 없거든요.

이럴 때 많은 폰트가 웹(html) 상에 제대로 나오는지 빠르게 확인할 수 있는 파이썬 코드를 올려보겠습니다.



댓글 쓰기



빠른 답변을 원하시면 댓글 작성 후 "□ 알림"에 체크를 하세요.

다음 이전