如何将终端应用程序的输出转换为图像?

如何将终端应用程序的输出转换为图像?

假设 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,任务会更加复杂,其解决方案取决于几个因素:

  1. 您需要颜色支持吗?
  2. 如果是,必须支持多少种颜色? (有几种不同的 ANSI 颜色编码方法)
  3. 您需要表情符号支持吗?
  4. 您想支持哪些脚本?仅仅是拉丁语还是更多?
  5. 您需要嵌入式终端图形支持吗?

在简单的情况下,这里所有问题的答案都是,这非常简单,并且有很多程序在那里做。

在相反的情况下,如果你想尽可能多地提供支持,任务可能会变得相当复杂。为了解决 wttr.in 的这个任务,我编写了一个自定义渲染引擎,它支持 1、2、3 和 4,除了一些复杂的东方文字,如梵文和阿拉伯文。它是用 Python 实现的,使用 PIL 进行图形操作,使用 pyte 进行虚拟终端渲染。您可以在 wttr.in 源代码中找到它:

https://github.com/chubin/wttr.in/blob/master/lib/fmt/png.py

相关内容