![在控制台中反转汉字字母](https://linux22.com/image/114230/%E5%9C%A8%E6%8E%A7%E5%88%B6%E5%8F%B0%E4%B8%AD%E5%8F%8D%E8%BD%AC%E6%B1%89%E5%AD%97%E5%AD%97%E6%AF%8D.png)
对于我现在正在开发的应用程序(将棋软件),对于文本模式,我需要将棋子的图形颠倒,因为对手的棋子是相反的。但是,Unicode 不提供颠倒的汉字字符。我正在搜索以类似于此维基百科文章的图表的样式反转汉字:https://en.wikipedia.org/wiki/Shogi#Player_rank_and_handicaps
他们使用 CSS 来做到这一点。我可以使用过滤器程序或内核 API (ioctl)。预先感谢您的回复
答案1
我听说过的终端模拟器都不支持颠倒文本,而且也没有类似于 CSS 的东西。
从技术上讲,人们可以想出某种转义序列(可能类似于粗体、斜体、下划线等 ANSI 序列)。理想情况下,至少有一些流行的终端仿真器(至少是 xterm、vte 和 iterm2)将同样实现此功能。
鉴于您的应用程序可能是唯一使用此功能的应用程序,我认为发生这种情况的可能性不大。
您可能想了解允许在终端模拟器内绘制图片的各种方法。可能的方案包括 Regis 和 Sixel(我听说过这些,但不了解它们 - 不知道它们是否足够适合您),或者某些终端仿真器提供的自定义解决方案,例如 Terminology 或 Kitty(我不是也熟悉这些解决方案)。但是,使用这样的解决方案,您的应用程序可能会被限制在特定的终端模拟器下运行。另外,你必须自己画汉字。
我的结论是,终端模拟器无法完成您正在寻找的功能,因此,如果您确实需要颠倒的字形,那么选择文本模式是一个错误的选择。您应该选择用图形工具包(例如 GTK+ 或 Qt)编写的图形应用程序,其中旋转文本是小菜一碟。
更新:
ECMA-48 定义了SCO - SELECT CHARACTER ORIENTATION
转义序列:\e[0 e
应选择默认方向,\e[1 e
应将后续字形逆时针旋转 45°,依此类推,直至\e[7 e
。我认为这从未在任何地方实施过。除了默认和颠倒之外,也不知道如何拉伸和裁剪字形。不管怎样,如果终端模拟器曾经实现颠倒的文本,那么使用这个转义序列可能是合理的(即使只接受 0 和 4 作为数字参数)。
答案2
约翰·扎伊采夫 (John Zaitseff) 写过一些python 实用程序将控制台 psf 字体转换为易于操作的简单 ascii 表示形式。您可以使用以下序列反转所选字体中的每个字形以创建新字体:
psf2psftx myfont.psf myfont.psftx
./invert <myfont.psftx >inverted.psftx
psftx2psf inverted.psftx myfontinverted.psf
其中 invert 是一个小 awk 脚本:
awk '
/ENDGLYPH/ { print glyph; glyph = "" }
/^\t[\.X]*$/ { glyph = $0 "\n" glyph; next }
{ print } '
例如,我使用他的屏幕截图模拟(需要reportlab和PIL包)来生成此图像反转标准 Linux 控制台字体后
lat1-08.psfu
zcat /usr/lib/kbd/consolefonts/lat1-08.psfu.gz >myfont.psf
...
echo abc >text
psftx-screenshot inverted.psftx text inverted.png
根据您的 python3 版本,您的代码可能会遇到一些问题,如果您想要同一字体中的字符的正向和颠倒版本,我认为您仍然需要处理字体,所以不要轻轻地开始这件事。