古代のX11ビットマップフォントで文字列をレンダリングするにはどうすればよいですか?私は次のようなものを意味します
-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*
で見つけることができますxfontsel
。そのフォントで特定の文字列を表示するコマンドラインツールなどが必要です。同様のTrueTypeフォントは、ピクセル単位で完全である必要があるため、機能しません(各文字の画像を取得して、そのフォントの画像をOCRしようとしています)。
コマンドラインツールがあるかどうかわかりません。しかし、XlibとCを使用すればいつでも自分でロールすることができます。
誰かがXlibを使用して文字列を表示する単純なX11Cプログラムを書いたようです。数行を変更してコンパイルします。
gcc -lX11 -o xrenderstring xrenderstring.c
..あなたのためにそれをするべきです。
私はこの要点でプログラム全体を再現し(元のソースから消えた場合)、2つの引数を取るように変更しました:1。fontname、2。レンダリングされる文字列。
だからあなたはそれを次のように呼ぶでしょう(もちろんコンパイルした後):
./xrenderstring "-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*" "Quick brown fox"
そのフォントで文字をレンダリングするには:
xfd -fn '-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*'
xfontsel -pattern '-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*'
特定の文字列をレンダリングするには:
xfontsel -pattern '-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*' -sample 'The quick brown fox jumps the shark'
ハックな方法を見つけました。以下を〜/.Xdefaultsに追加します。
xedit*editWindow*font: -*-lucida-medium-r-normal-*-36-*-*-*-*-*-*-*
その後、実行します
$ xrdb -merge ~/.Xdefaults
$ xedit
次に、文字列を入力し、スクリーンショットを撮り、gimpで比較しました。
(X11フォントは結局のところ完全に正しいものではありませんでした。私のソースはLucida Sans 36 pt(ttf)を使用しましたが、アンチエイリアスやおそらく奇妙なヒントはありませんでした。)
ImageMagickを使用できます。
追加された利点:
短いテキストの場合
echo "The quick brown fox jumps over the lazy dog." \
| convert \
-font '-*-fixed-*-*-*-*-18-*-*-*-*-*-iso8859-*' \
TEXT:- -trim fox.png
画面にレンダリングするには:
echo "The quick brown fox jumps over the lazy dog." \
| convert \
-font '-*-fixed-*-*-*-*-18-*-*-*-*-*-iso8859-*' \
TEXT:- -trim MIFF:- | display MIFF:-
削除-trim
して、ImageMagickがキャンバスを使用して描画していることを確認します。
convert -size 2000x20 xc:black \
-font '-*-fixed-*-*-*-*-18-*-*-*-*-*-iso8859-*' \
-fill white \
-draw "text 0,15 'The quick brown fox jumps over the lazy dog.'" \
-trim +dither -depth 1 fox.png
以下の結果の画像の重量は592バイトです。
上記の行に配置できる文字は1つだけですが、複数の文字に個別に適用すると、結果の画像のサイズや共通のベースラインが同じでなくなります。
for CHAR in H e l o ' ' W r d
do
convert -size 9x13 xc:black \
-font '-*-fixed-*-*-*-*-18-*-*-*-*-*-iso8859-*' \
-fill white -stroke none \
-draw "text 0,10 '${CHAR}'" \
+dither -depth 2 fixed_char_${CHAR}.png
done
以下のコマンドは、個別にフレーム化された画像が共通の配置を維持していることを示すPNGを生成します。
montage -mode concatenate -tile x1 fixed_char_H.png fixed_char_e.png \
fixed_char_l.png fixed_char_l.png fixed_char_o.png fixed_char_\ .png \
fixed_char_W.png fixed_char_o.png fixed_char_r.png fixed_char_l.png \
fixed_char_d.png helloworld.png