プログラミング
Jim's TrueType QR Code Font
Jim's TrueType QR Code Font (github.com)
要約
Jim's TrueType QR Code Fontは、角括弧で囲まれたテキストをQRコードシンボルに変換する実験的なOpenTypeフォントです。このフォントは、QRコードブロックの外側のテキストを通常のテキストとして表示したまま、内部のテキストをQRコードに変換します。フォントは自動生成され、ビルドスクリプトによってアウトラインやGSUB機能がコンパイルされます。QRコードの生成にはバイトモード、印字可能ASCII入力、固定マスクパターン0が使用されます。
全文翻訳
Jim's TrueType QR Code Fontライブデモ: https://qr.jim.sh/
ダウンロード: qrfont-1L.ttf (21x21モジュール、最大17文字) qrfont-2L.ttf (25x25モジュール、最大32文字) qrfont-3L.ttf (29x29モジュール、最大53文字)
このリポジトリは、角括弧で区切られたテキストをQRコードシンボルに変換し、周囲のテキストを読みやすいままにする実験的なOpenTypeフォントを生成します。例: abc[hello]ghi
すべてのフォントは以下を使用します:
バイトモード
印字可能ASCII入力
固定マスクパターン0
[と]をデリミタとして使用します。
フォントは手書きではなく生成されます。ビルドスクリプトは、グリフのアウトラインとGSUB機能ロジックを出力し、それをdist/qrfont-*.ttfにコンパイルします。デフォルトのビルドでは、デリミタパーサー、バイト展開、リード・ソロモンパリティ回路、QRモジュールの配置、固定マスクレンダリングをコンパイルします。
印字可能なASCIIグリフは、Liberation Sans Regularからコピーされ、QR Font emスクエアにスケーリングされるため、ブラケットで囲まれたQRブロックの外側のテキストは、同じフォントで通常のテキストとしてレンダリングされます。Liberationはソースフォントライセンスの下で予約されたフォント名であるため、生成されたファミリーはQR Font 1-L、QR Font 2-L、QR Font 3-Lと名付けられています。
ビルド
make
プロジェクトはPython依存関係管理にuvを使用しています。以下を実行してジェネレーターを直接実行することもできます:
uv run tools/build_font.py
デフォルトでは、ジェネレーターは以下からLiberation Sans Regularを読み込みます:
/usr/share/fonts/truetype/liberation/LiberationSans-Regular.ttf
互換性のある別のTrueTypeソースを使用するには:
uv run tools/build_font.py --base-font /path/to/BaseFont-Regular.ttf
生成された完全なリード・ソロモン回路を試すには:
make full-parity
これもデフォルトのmakeパスです。数千のコンテクスチュアルルックアップを出力し、通常はレイアウトのみのビルドよりも顕著に時間がかかります。
プレースホルダーゼロパリティを使用した高速なレイアウトのみのビルド:
make fast-placeholder
シェイプされたグリフストリームを検査するには:
uv run tools/shape_debug.py '[a]' '[b]'
出力:
dist/qrfont-*.ttf (1-L、2-L、および3-Lフォントファイル)
dist/index.html (インタラクティブなWebデモ)
build/qrfont-*.fea (生成されたOpenTypeフィーチャーファイル)
ブラウザでdist/index.htmlを開き、[hello]のようなブラケットで囲まれたテキストを入力してください。abc[def]ghiのような混合テキストは、通常のテキスト、次にdefのQRコード、そして通常のテキストとしてレンダリングされるはずです。
ライセンス
生成されたフォントはLiberation Sans Regularの改変版であり、SIL Open Font License, Version 1.1の下でライセンスされています。LICENSE-OFL.txtおよびNOTICE.mdを参照してください。
注記
これは概念実証フォントです。OpenTypeシェイピングに依存するため、フォントにGSUBフィーチャーを適用する環境が必要です。QRブロック内の入力は、選択されたフォントバージョンに応じて、印字可能なASCIIに制限され、最大17、32、または53文字になります。