On this page
폰트 파일의 패밀리 이름을 변경하고, 변환된 파일들을 일괄적으로 처리하는 방법을 알아보겠습니다. 이번 포스트에서는 .otf
파일을 .woff2
파일로 변환하고, 패밀리 이름을 변경하는 스크립트를 작성합니다.
준비 사항
- 폴더 내의 모든
.otf
파일을 처리하도록 스크립트를 작성합니다.
fonttools
와 woff2
패키지가 필요합니다. 다음 명령어로 설치할 수 있습니다:
pip3 install fonttools
sudo apt-get install woff2
스크립트 설명
1. 폰트 패밀리 이름 변경 함수
폰트 파일의 패밀리 이름을 변경하는 함수입니다. 폰트 이름의 여러 레코드를 업데이트합니다.
def change_font_family(input_path, output_path, new_family_name):
font = TTFont(input_path)
name_records = font['name'].names
for record in name_records:
if record.nameID == 1: # Family
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 4: # Full name
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 16: # Preferred Family
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 21: # WWS Family
record.string = new_family_name.encode('utf-16-be')
font.save(output_path)
2. OTF를 TTF로 변환하는 함수
OTF 파일을 TTF 파일로 변환하는 함수입니다.
def otf_to_ttf(otf_path, ttf_path):
font = TTFont(otf_path)
font.save(ttf_path)
3. TTF를 WOFF2로 변환하는 함수
TTF 파일을 WOFF2 파일로 변환하는 함수입니다.
def ttf_to_woff2(ttf_path, woff2_path):
subprocess.run(["woff2_compress", ttf_path], check=True)
base_name = os.path.splitext(ttf_path)[0]
os.rename(base_name + ".woff2", woff2_path)
4. 폴더 내의 모든 OTF 파일을 처리하는 함수
폴더 내의 모든 .otf
파일을 처리하여 각각의 파일명 뒤에 -modified
를 붙인 후, 폰트 패밀리 이름을 변경하고, otf
와 woff2
파일로 변환합니다.
def process_fonts():
input_folder = os.getcwd() # 인풋 폴더설정
for filename in os.listdir(input_folder):
if filename.lower().endswith('.otf'):
input_font_file = os.path.join(input_folder, filename)
base_name = os.path.splitext(filename)[0]
new_family_name = base_name.replace('-', ' ')
temp_ttf = os.path.join(input_folder, f"{base_name}-temp.ttf")
temp_otf = os.path.join(input_folder, f"{base_name}-temp.otf")
output_otf = os.path.join(input_folder, f"{base_name}-modified.otf")
output_woff2 = os.path.join(input_folder, f"{base_name}-modified.woff2")
# Change font family in the OTF file
change_font_family(input_font_file, temp_otf, new_family_name)
# Convert OTF to TTF
otf_to_ttf(temp_otf, temp_ttf)
# Convert TTF to WOFF2
ttf_to_woff2(temp_ttf, output_woff2)
# Move the modified OTF file to the final output location
os.rename(temp_otf, output_otf)
# Clean up temporary TTF file
os.remove(temp_ttf)
print(f"Processed {filename}: OTF and WOFF2 files created with new family name '{new_family_name}'.")
실행 방법
- 스크립트 저장: 위 코드를
process_fonts.py
파일로 저장합니다.
스크립트 실행:
python3 process_fonts.py
필요한 패키지 설치:
pip3 install fonttools
sudo apt-get install woff2
이 스크립트를 실행하면 현재 경로 내의 모든 .otf
파일이 처리되어, 폰트 패밀리 이름이 변경된 otf
와 woff2
파일이 생성됩니다. 각 파일명 뒤에는 -modified
가 붙습니다.
전체코드
import subprocess
from fontTools.ttLib import TTFont
import os
def change_font_family(input_path, output_path, new_family_name):
font = TTFont(input_path)
name_records = font['name'].names
for record in name_records:
if record.nameID == 1: # Family
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 4: # Full name
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 16: # Preferred Family
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 21: # WWS Family
record.string = new_family_name.encode('utf-16-be')
font.save(output_path)
def otf_to_ttf(otf_path, ttf_path):
# Convert OTF to TTF using fontTools
font = TTFont(otf_path)
font.save(ttf_path)
def ttf_to_woff2(ttf_path, woff2_path):
# Convert TTF to WOFF2
subprocess.run(["woff2_compress", ttf_path], check=True)
# Rename the compressed file to the target WOFF2 path
base_name = os.path.splitext(ttf_path)[0]
os.rename(base_name + ".woff2", woff2_path)
def process_fonts():
input_folder = os.getcwd()
for filename in os.listdir(input_folder):
if filename.lower().endswith('.otf'):
input_font_file = os.path.join(input_folder, filename)
base_name = os.path.splitext(filename)[0]
new_family_name = base_name.replace('-', ' ')
temp_ttf = os.path.join(input_folder, f"{base_name}-temp.ttf")
temp_otf = os.path.join(input_folder, f"{base_name}-temp.otf")
output_otf = os.path.join(input_folder, f"{base_name}-modified.otf")
output_woff2 = os.path.join(input_folder, f"{base_name}-modified.woff2")
# Change font family in the OTF file
change_font_family(input_font_file, temp_otf, new_family_name)
# Convert OTF to TTF
otf_to_ttf(temp_otf, temp_ttf)
# Convert TTF to WOFF2
ttf_to_woff2(temp_ttf, output_woff2)
# Move the modified OTF file to the final output location
os.rename(temp_otf, output_otf)
# Clean up temporary TTF file
os.remove(temp_ttf)
print(f"Processed {filename}: OTF and WOFF2 files created with new family name '{new_family_name}'.")
if __name__ == "__main__":
process_fonts()
OTF 폰트패밀리만 변경하기
1. fontTools
설치
아래 명령어로 fontTools
패키지를 설치합니다. Amazon Linux 2 환경에서 Python 패키지를 설치하려면 pip
를 사용해야 합니다.
sudo yum install python3-pip
pip3 install fonttools
2. 스크립트 실행
Python 스크립트를 실행할 때 python3
명령어를 사용하여 올바른 Python 환경에서 실행되도록 합니다.
# Ensure the script is executable
chmod +x change_font_family.py
# Run the script with python3
python3 change_font_family.py Pretendard-Bold.otf Pretendard-Bold-modified.otf "PretendardBold"
아래는 Python 스크립트 change_font_family.py
의 내용입니다.
change_font_family.py
스크립트
from fontTools.ttLib import TTFont
import sys
def change_font_family(input_path, output_path, new_family_name):
font = TTFont(input_path)
name_records = font['name'].names
for record in name_records:
if record.nameID == 1: # Family
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 16: # Preferred Family
record.string = new_family_name.encode('utf-16-be')
elif record.nameID == 21: # WWS Family
record.string = new_family_name.encode('utf-16-be')
font.save(output_path)
if __name__ == "__main__":
if len(sys.argv) != 4:
print("Usage: python3 change_font_family.py <input_font_file.otf> <output_font_file.otf> <new_family_name>")
sys.exit(1)
input_font_file = sys.argv[1]
output_font_file = sys.argv[2]
new_family_name = sys.argv[3]
change_font_family(input_font_file, output_file, new_family_name)