3

古代のX11ビットマップフォントで文字列をレンダリングするにはどうすればよいですか?私は次のようなものを意味します

-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*

で見つけることができますxfontsel。そのフォントで特定の文字列を表示するコマンドラインツールなどが必要です。同様のTrueTypeフォントは、ピクセル単位で完全である必要があるため、機能しません(各文字の画像を取得して、そのフォントの画像をOCRしようとしています)。

4

4 に答える 4

3

コマンドラインツールがあるかどうかわかりません。しかし、XlibとCを使用すればいつでも自分でロールすることができます。

誰かがXlibを使用して文字列を表示する単純なX11Cプログラムを書いたようです。数行を変更してコンパイルします。

gcc -lX11 -o xrenderstring xrenderstring.c

..あなたのためにそれをするべきです。

私はこの要点でプログラム全体を再現し(元のソースから消えた場合)、2つの引数を取るように変更しました:1。fontname、2。レンダリングされる文字列。

だからあなたはそれを次のように呼ぶでしょう(もちろんコンパイルした後):

./xrenderstring "-*-lucida-medium-r-normal-*-34-*-*-*-*-*-*-*" "Quick brown fox"
于 2012-07-27T10:51:12.033 に答える
2

そのフォントで文字をレンダリングするには:

  • 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'
于 2012-07-31T05:40:19.860 に答える
1

ハックな方法を見つけました。以下を〜/.Xdefaultsに追加します。

xedit*editWindow*font: -*-lucida-medium-r-normal-*-36-*-*-*-*-*-*-*

その後、実行します

$ xrdb -merge ~/.Xdefaults
$ xedit

次に、文字列を入力し、スクリーンショットを撮り、gimpで比較しました。

(X11フォントは結局のところ完全に正しいものではありませんでした。私のソースはLucida Sans 36 pt(ttf)を使用しましたが、アンチエイリアスやおそらく奇妙なヒントはありませんでした。)

于 2012-07-27T10:47:30.487 に答える
0

ImageMagickを使用できます。

追加された利点:

  • 昔ながらの(固定)またはTTFまたは他のフォントをレンダリングできます
  • 画面または画像ファイル(PNGなど)にレンダリングできます

単純

短いテキストの場合

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がキャンバスを使用して描画していることを確認します。

より多くの制御

  • キャンバスサイズ。2段階の計算を回避するには、必要以上に大きいキャンバスを作成し、後でトリミングします。
  • 背景色と前景色を制御します。
  • PNGパラメータを制御します(ピクセルあたり1ビット)
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バイトです。

X11フォントでレンダリングされた文'fixed'。

独立してフレーム化された文字を取得するには(後の構成用)

上記の行に配置できる文字は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
于 2020-04-03T09:57:40.260 に答える