繁体   English   中英

以 X11 位图字体呈现字符串

[英]Render string in X11 bitmap font

如何以古老的 X11 位图字体呈现字符串? 我的意思是像

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

我可以用xfontsel找到它。 我只需要一个命令行工具等,以该字体显示给定的字符串。 类似的 TrueType 字体将无法工作,因为它必须是像素完美的(我正在尝试获取每个字母的图像以使用该字体对图像进行 OCR)。

我不确定是否有命令行工具。 但是您始终可以使用 Xlib 和 C 来实现自己的目标。

有人似乎已经编写了一个简单的 X11 C 程序,它使用 Xlib 显示字符串。 更改几行并编译:

gcc -lX11 -o xrenderstring xrenderstring.c

.. 应该为你做。

我已经在这个要点中复制了整个程序(以防它从原始源中消失),修改为采用两个参数:1. 字体名称,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。

增加的好处:

  • 可以呈现老式(固定)或 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 使用画布进行绘制。

更多控制

  • 画布的尺寸。 为避免两步计算,创建一个比需要的更大的画布并在之后修剪它。
  • 控制背景和前景色。
  • 控制 PNG 参数(每像素一位)
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 字体“固定”呈现的句子。

获取独立构图的字符(供以后合成)

您可以在上面一行中只放置一个字符,但单独应用于多个字符会导致生成的图像不再具有相同的大小或相同的公共基线。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM