假设 CLI 应用程序my_bin
在终端中生成一个输出,其中包含彩色文本、Unicode 符号和表情符号。
如何在 Ubuntu 上将输出转换为 svg 或图像?
例如,curl "v2.wttr.in/Berlin"
终端中的输出是这样的:
如何将其转换为图像文件(例如矢量图像文件、png、svg 等)?
更新:
我需要一个实际上不需要在终端窗口中渲染命令输出的解决方案。因此它应该在后台工作,而无需利用 X 或 Wayland 来捕获其视图。
尝试过
curl "v2.wttr.in/Berlin" | pbmtext | pnmtopng > out.png
这不会渲染颜色或表情符号尝试
pango-view --font='mono' -qo out.png <(curl v2.wttr.in/Berlin)
它呈现表情符号,但不呈现颜色的终端转义码。
答案1
wttr.in 作者在这里。
首先,如果您想要将 wttr.in 输出转换为图片,仅此而已,则任务很简单,因为 wttr.in 本身有一个 PNG 前端。要使用它,只需附加.png
到查询末尾:
wget v2.wttr.in/Berlin.png
如果要将任何终端输出转换为 PNG,任务会更加复杂,其解决方案取决于几个因素:
- 您需要颜色支持吗?
- 如果是,必须支持多少种颜色? (有几种不同的 ANSI 颜色编码方法)
- 您需要表情符号支持吗?
- 您想支持哪些脚本?仅仅是拉丁语还是更多?
- 您需要嵌入式终端图形支持吗?
在简单的情况下,这里所有问题的答案都是不,这非常简单,并且有很多程序在那里做。
在相反的情况下,如果你想尽可能多地提供支持,任务可能会变得相当复杂。为了解决 wttr.in 的这个任务,我编写了一个自定义渲染引擎,它支持 1、2、3 和 4,除了一些复杂的东方文字,如梵文和阿拉伯文。它是用 Python 实现的,使用 PIL 进行图形操作,使用 pyte 进行虚拟终端渲染。您可以在 wttr.in 源代码中找到它:
https://github.com/chubin/wttr.in/blob/master/lib/fmt/png.py