[파이썬] TTF 또는 OTF 폰트를 WOFF2 웹폰트로 변환하는 코드

◎ 들어가기에 앞서

일단 이 코드는 파이썬에 대한 지식이 거의 없다시피한 사람(me)이 작성한 것으로 작동은 잘 되나 코드의 체계성이나 완성도는 다소 떨어진다는 점을 생각하시고 코딩에 어려움을 겪으시는 초보분들이 사용하셨으면 하는 바람으로 올려봅니다.








◎ 파이썬 설치법

먼저 파이썬을 설치해야 합니다.

파이썬이 설치되어 있다면 이 부분은 넘기시기 바랍니다.

아래 이미지를 클릭해서 파이썬을 다운로드 받으세요.

※ 설치 시 "Add python.exe to PATH" 부분을 꼭! 체크하고 설치하세요.




◎ 사용법

설치가 완료 됐으면 사용법은 어렵지 않습니다.

프로그램을 원활히 사용하기 위하여 패키지 관리자(pip)를 이용하여 몇 가지 설치를 해주셔야합니다.


  1. 윈도우 하단에 있는 "찾기" 기능에서 "cmd"를 입력해서 "명령 프로프트"를 실행시켜 줍니다.
  2. 거기서 "pip install fonttools rich colorama"를 입력해 줍니다.

여러 개의 모듈이 설치가 됐다면 이제 아래 코드를 메모장으로 복사해서 "파일명.py"로 저장을 해줍니다.




import time
from fontTools.ttLib import TTFont
from rich.console import Console
from rich.progress import Progress
import os 
from os import system
import colorama

# 창 제목 및 크기
system("title "+"TTF·OTF to WOFF2 변환기 (제작: 휠맨)")
cmd = 'mode 75,20'
os.system(cmd)

colorama.init()


def font_to_woff2(input_font_path, output_woff2_path):
    # 폰트 파일을 읽음
    font = TTFont(input_font_path)

    # WOFF2 파일로 저장
    font.flavor = "woff2"
    font.save(output_woff2_path)

# 현재 폴더의 경로를 가져옴
current_directory = os.getcwd()

# 변환된 WOFF2 파일을 저장할 폴더 생성 또는 확인
output_folder = os.path.join(current_directory, "Woff2_변환")
os.makedirs(output_folder, exist_ok=True)

# 현재 폴더 내의 모든 TTF 및 OTF 파일을 찾음
font_files = [f for f in os.listdir(current_directory) if f.lower().endswith(('.ttf', '.otf'))]

total_files = len(font_files)

console = Console()

with Progress() as progress:
    print()
    task = progress.add_task(" [cyan]폰트 변환 중...", total=total_files)

    for idx, font_file in enumerate(font_files, start=1):
        input_font_path = os.path.join(current_directory, font_file)
        output_woff2_path = os.path.join(output_folder, os.path.splitext(font_file)[0] + '.woff2')

        # 파일 이름 출력
        file_description = f" [bright_cyan]변환 완료: [bright_white][{os.path.basename(input_font_path)}][bright_magenta]"
        progress.console.print(file_description, style="bold", end=" ")

        # 변환 진행
        font_to_woff2(input_font_path, output_woff2_path)

        # 프로그레스 바 업데이트
        progress.update(task, advance=1, refresh=True)
        print(f"{file_description} {idx}/{total_files}", end="\r", flush=True)
        
    # "폰트 변환 완료"로 텍스트 변경
    progress.console.print("\n [bright_green]폰트 변환 완료", style="bold")
    progress.remove_task(task)  # 불필요한 task 제거

console.print(f"\n [bright_yellow]WOFF2 파일은 '{output_folder}' 폴더에 저장되었습니다.", style="bold")
     
# 5초 대기
time.sleep(5)


파일을 저장했으면 TTF·OTF 파일들이 있는 폴더에 방금 만든 py 파일을 넣고 실행하면 아래와 같은 창이 뜨면서 변환된 woff2 폰트 파일을 "Woff2_변환" 폴더에 저장 하게 됩니다.





주의!
가끔 폰트 변환을 했을 때 뷰어에서는 파일이 정상적으로 잘 보이지만 막상 html에서 연결해서 보면 폰트가 반영되지 않는 경우가 있습니다.
이때는 폰트를 변환해 주는 사이트를 이용하시던지(폰트 변환 사이트에서 했다고 다 되는 건 아닙니다) 파일을 TTF에서 OTF파일로 바꿔서 변환을 해보시기 바랍니다.
또는 woff2로는 안 되고 불가피하게 woff로 제작을 해야하는 경우도 발생할 수 있습니다.




◎ 마치며

제 블로그에 있는 "[상업용 무료 폰트]"들은 제가 파일을 직접 변환해서 업로드한 후에 각각의 폰트를 연결해서 사용하고 있습니다.

인터넷에는 폰트 파일을 변화해 주는 사이트가 여러 곳이 있습니다.

제가 여러가지를 사용해 본 결과 사이트마다 특색이 다 달라서 무엇이 좋다 나쁘다를 말하기는 그렇고, 사용의 편의성이 어떤가를 따져봤습니다.

어떤 곳은 변환을 해주지만 막상 변환된 파일을 보면 제대로 작동하지 않는 곳도 있고, 변환할 수 있는 파일의 개수를 제한하는 곳도 있고, 어느 곳은 변환 속도가 느리고, 어느 곳은 파일 하나씩만 되고, 등등 정말 다양하게 있었습니다.

저는 느린 건 못 참아서 변환이 빠르고 정확하지만 하루 변환 개수 제한이 있는 곳에서 변환을 했습니다만 몇 개 변환하지도 못하고 하루를 또 기다려야 하니 많이 답답하더라고요. (그렇다고 다른 곳을 이용하기는 싫고...)

무엇보다도 인터넷의 특성상 파일을 업로드하고, 변환된 파일을 다운로드해야 하는 과정을 거치게 되는데 파일이 많으면 이것도 꽤나 귀찮은 작업이 되고 맙니다.

그래서 초반에는 온라인 변환 사이트를 이용하다가 인터넷을 뒤져가며 현재 이 파일을 제작하게 되었고 위에서 언급한 파일 업·다운 과정이 사라지고 파일 변환 속도도 나쁘지 않아서 현재는 이 파일로 변환한 파일을 사용하고 있고 딱히 다른 문제는 보지 못했습니다.

"뭐 저렇게 허접하게 만들었어"라고 생각하실 분도 계시겠지만, 어쩌겠습니까 코딩의 문외한인 저의 한계인데요. 😅

참고로 "난 woff2 보다 woff로 변환하고 싶은데..." 하시는 분들은 위 코드에서 "woff2"에 해당하는 모든 글자를 "woff"로 바꾸시면 woff로 변환을 할 수 있음을 알려드립니다.


아무쪼록 사용하실 때 응원에 댓글이라도 남겨주시면 감사하겠습니다.

다음에도 저의 수준에 맞는 허접한 소스 코드를 또 공개해 보겠습니다.

그럼 잘 사용하세요.


댓글 쓰기



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

다음 이전