TrueType QR Codeフォント - フォントだけでQRコードを作る
(qr.jim.sh)- 角括弧で囲んだテキストをQRコードに変換するTrueType/OpenTypeフォントで、画像生成なしに文書内へQRコードを挿入できる
- 変換はフォント内部のOpenTypeルールが処理し、角括弧の外側のテキストは通常のラテン文字テキストとしてそのまま表示される
- QRコードのブロックもテキストのまま残るため、コピー&ペースト、プレーンテキストでの保存、通常の文とのインライン配置が可能
- ブラウザはシェーピング前に改行位置を決定するため、空白・ピリオド・スラッシュのような位置でQRコードが複数行に分割されることがある
- HTMLで安定して表示するには、角括弧ブロックを
white-space: nowrap;またはdisplay: inline-block;が適用されたコンテナで囲む必要がある
フォントがQRコードを作る仕組み
- Jim's TrueType QR Code Font は実際のTrueType/OpenTypeフォントで、
[hello]のように入力した角括弧内のテキストをQRコードとしてレンダリングする - QRコード生成はフォント内のOpenTypeルールで処理されるため、別途画像生成や前処理の工程は不要
- 角括弧の外側のテキストは読める通常のラテン文字テキストのまま残る
- 角括弧内では 表示可能なASCII を使う必要がある
- フォントごとの対応文字数は次の通り
- QR Font 1-L: ブロックあたり最大17文字
- QR Font 2-L: ブロックあたり最大32文字
- QR Font 3-L: ブロックあたり最大53文字
- Plain Sans: QR解析なし
- 通常テキストはLiberation Sans由来の書体で表示される
テキストとして残るQRコードと表示時の注意点
- QRコードがテキストのまま維持されるため、レンダリングされたQRブロックを通常の文字のようにコピー&ペーストしたり、プレーンテキストとして保存したり、ラテン文字テキストとインラインで混在させたりできる
- ブラウザのレイアウトエンジンはシェーピング前にUnicodeテキスト基準で改行を行う
- 空白、ピリオド、スラッシュのような改行可能文字があり、テキストコンテナの端に達するとQRコードが複数行に分かれることがある
- HTMLでは、角括弧ブロックを
white-space: nowrap;またはdisplay: inline-block;スタイルが適用されたコンテナで囲むと安定してレンダリングできる
- ダウンロードとソース
2件のコメント
これは良いですね。いつか役に立ちそうです。
GeekNewsに導入してみてもよさそうですが、適した使いどころが分かりませんね。
テキストベースに適したものは、GeekNewsに継続的に導入しています。
Datatype - テキストをチャートに変換する可変フォント
Google、白黒絵文字フォント Noto Emoji を公開
Lobste.rs のコメント
QRコードで内容がどこにエンコードされるのかを見せるやり方が良い。右下から始まり、上下にジグザグに動きながら右から左へ埋まっていく流れが分かる
ただ、その目的なら、位置/整列/タイミングマーカーは
]を待たずに[の時点ですぐ埋まるようにしたほうが、構築過程をよりよく見られたかもしれない。もちろん、]で処理すれば、おかしな途中状態や長すぎる値がコードだと誤認されるのを避けられる点も理解できるすごい。最近、事業で使っていたQRコードが有料QRコード生成サービスの背後で乗っ取られる詐欺に遭った
もっと注意すべきだったが、WebベースのJavaScript QRエンコーダーと詐欺的なQRサービスを見分けるのは難しかった。こういうオープンな選択肢が検索エンジン最適化をもっと頑張って、必ずしも詳しくない人たちも詐欺を避けられるようになるといい
ああ、OpenTypeがチューリング完全だと考えれば予想できたはずだった
サイトが一時的に独自フォントを設定できるようにする一時ボタンがあるとよさそう
自分だけかもしれないが、モバイルでは動かないようだ。選択ボックスでどのフォントを選んでも、どちらも通常のテキストに見える
AndroidのBraveブラウザで確認した
QRの内容のテキストをコピーできる機能がChromeで壊れているようだ。個人的には、すごいOpenTypeハックを除けばこれが最大の利点に見えるのだが、QR自体を選択してコピーすると閉じ角括弧だけが出てくる
選択範囲をドラッグしてQR全体を確実に含めると、テキスト全体も一緒にコピーされる