Python Selenium でコンソールを非表示にする
Python Selenium を実行すると ChromeDriver のコンソールウィンドウが表示されてしまいます。 …
Pythonでフォントをサブセット化(使う文字だけを抽出して軽量化)する方法を紹介します。
ある日、自分が運用しているウェブサイトのフォントを変えたいなと思いました。
それまでは Google Fonts から良さそうなものを選択して使っていました。なのでまた Google Fonts でフォントを探したのですが、日本語に対応しているフォントがまだまだ少なく、気に入るものが見つかりませんでした。
早々に Google Fonts は諦めて、ネットで検索してフリーフォントを探すことにしました。
単にフリーフォントと検索するだけで様々なフォントが見つかり、その中に気に入ったものがあったため、それを使うことにしました。
ただ、フォントファイルのサイズを見ると5MBを超える大きさでした。日本語フォントなのでしょうがないとも思いつつ、軽量化する方法はないかとネットで調べると、フォントを「サブセット化」するという技があることを知りました。
フォントのサブセット化とはフォントの中から特定の文字(自分で指定可能)だけを抽出してフォントを再構成することです。一部の文字だけを抽出しているので元のフォントより軽量になったフォントを使用できます。
ここから実際にフォントをサブセット化するやり方を書いていきます。
Python はあらかじめインストールされているものとします。
fonttools をインストールしましょう。この中にフォントをサブセット化するツールが含まれています。
pip install fonttools
フォントを woff2 形式にしたい場合は以下もインストールする必要があります。
pip install brotli
これで必要なものはインストールできました。
fonttools をインストールしたときに付属する pyftsubset というプログラムを使用することでフォントをサブセット化できます。
下記が使用例です。
otf 形式のフォントファイルをサブセット化し、woff2 形式のフォントを作成しています。
pyftsubset "./original.otf" --text-file="./chars.txt" --layout-features=* --flavor=woff2 --output-file="./subset.woff2"
font-feature-settings
を使用したい場合は指定します。使わないなら不要です。--text-file に指定するファイルですが、ただの文字だけ書いてあるテキストファイルを用意すれば良いです。
例えば、半角英数字記号だけを抽出したい場合は以下をファイルに記載します。
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
フォントのサブセット化の方法は分かりましたが抽出したい文字(--text-fileで指定する文字)はどうやって決めたら良いでしょうか?
第一水準漢字+記号+ローマ字+カタカナ+ひらがな を使う
よく使う文字だけを使う方法です。ネットで「第一水準漢字」などと検索すると簡単に出てきます。
HTMLファイルからテキストを抽出する(静的サイトの場合)
静的サイトの場合、ページのHTMLファイルからテキストを抽出して使用する方法があります。
実際に使用している文字だけを使うのでフォントサイズはだいぶ小さくなると思います。
HTMLファイルからテキストを抽出するには、自分でプログラムを作ってもいいですし、使えそうなツールも公開されています。
以上でフォントをサブセット化する方法の紹介を終わります。
Python Selenium を実行すると ChromeDriver のコンソールウィンドウが表示されてしまいます。 …
Python で Selenium を使ったプログラムを PyInstaller で実行ファイル化する自分用まとめです。 …
wxPythonを使ってPythonでGUIアプリケーションを作ってみましょう。
PythonでフォルダをZIPファイル(.zip)に圧縮する方法です。 また、ZIPファイルを解凍する方法についても記し …
Google ColaboratoryでStable Diffusion web UIを使って画像を生成していると、たま …
PyInstallerを使えば簡単にexeを作成できますが、1つのフォルダに複数のexeを作るにはどうすればよいのか分か …
selenium の読み込みスピードを速くするために、広告などの邪魔なjsをブロックしたいと思いました。 …