>一覧へ戻る
カスタムフォントを極限まで軽量化。URLから使用されている文字列を抽出し、サブセット化とWOFF変換を行い置き換える

ここでは全てのファイルと出力先をディレクトリ直下で行いますが、ご自身の環境に合わせて変更してください。
Resultのトップページで軽量化してみたところ、4602kb→55kbまで削減出来ました。

Pythonを使用、エディタはJupyter lab
加工してDjangoのViewに設置しておけば開発環境でページにアクセスする度サブセット化することも可能です。
といってもそこまでの頻度でやる必要はないので、ローカル環境で使用できれば良いと思います。

まず必要なライブラリをpipします。

!pip install fonttools
# Woff2形式にしたい場合は brotliも必要
!pip install brotli
!pip install requests
!pip install beautifulsoup4

# 必要なモジュールをインポート WOFF2に変換する場合はbrotliも

import requests
from bs4 import BeautifulSoup

# BeautifulSoupを使って特定のURLから使用しているテキストを抽出します。

url = "https://result-web.com/"
# サブセット化したいファイル名を指定します。
subset_file = "original.ttf"

# 新しく出力する形式の拡張子に変えます

new_subset_file = "".join(subset_name.split(".")[:-1]) + ".woff"
# サブセット化したい文字列の出力先
file_name = "text_file.txt"

# ページ情報を取得します

response = requests.get(url)
# パーサーの説明に関しては省きます。ここでは追加ライブラリが不要なhtmlparserを使用
bs = BeautifulSoup(res.text, "html.parser")

# 抽出した文字から重複なしの文字列リストを作成。元の順列を保持する必要はないのでsetを使います

unique_list = list(set(bs.text))

# サブセット化したくない文字をリストから削除しておきます。アルファベットはサブセット化したくない場合など。

remove_list = ["\n","\u3000"]
new_list = [i for i in unique_list if i not in remove_list]

# テキストファイルとして出力します。

f = open(file_name,"w",encoding="utf8")
f.writelines(new_list)
f.close()

上記で指定したファイル名でWOFF形式出力して完了です。

! pyftsubset $subset_file --text-file=$file_name --layout-features=* --flavor=woff --output-file=$new_subset_file

# 予備知識
[エクスクラメーション(!)]を先頭に付与する事で、OSのコマンドを呼べます。
[ドルマーク($)]でoSコマンドでPytohnの変数を使用できます。


プログラミング 2023-03-13