【问题标题】:How to create & save a tkinter.Canvas image on a server w/ no display如何在不带显示的服务器上创建和保存 tkinter.Canvas 图像
【发布时间】:2021-08-24 04:15:52
【问题描述】:

我编写了一个程序,通过 tkinter.Canvas 生成图像并保存它。现在我正在更新这个项目以使用 FastAPI 让用户点击我的终点并下载此图像。

我不想在服务器上显示图像,只是在内存中生成它,将其保存到存储中,然后返回该图像。

最初的概念验证测试有效,但我无法在 Docker 中使其工作,因为没有设置 $DISPLAY。与我见过的其他问题不同,我并没有尝试直接显示图像,只是生成图像,保存并返回文件路径。

这不是Tkinter setup on headless server 的欺骗。这个问题归结为“我如何不在服务器上运行 tkinter?”我仍然需要 tkinter,我只是无意显示它。

我也看到了一些关于 X11 的东西,但似乎我需要知道服务器的环境才能安装 X11,而我没有。

tkinter 真的不能在没有 $DISPLAY 的情况下生成图像(即使我不打算显示它)?如果是这样,我可以使用 tkinter 的替代品来生成图像而无需 $DISPLAY 吗?我完全误解了它是如何工作的主要部分吗?看起来我应该能够生成图像并保存字节,而不需要实际图形渲染所需的所有东西......

【问题讨论】:

  • 您可以尝试使用Pillow.ImagePillow.ImageDraw 代替tkinter 生成不显示的图像。
  • “我仍然需要 tkinter,我只是不想显示它。” - 不管怎样,tkinter 需要显示。你试过在你的 docker 容器上设置 xvfb 吗?
  • “我可以使用 tkinter 的替代品来生成图像而无需 $DISPLAY 吗?” 在这里询问工具推荐是题外话。但是,您可能想查看ImageMagick
  • @acw1668 我实际上已经在使用 Pillow.Image 来保存,我想我没有意识到我也可以使用它来绘制。感谢您的建议,我会研究一下!
  • @BryanOakley 我肯定会研究 xvfb(如果 acw1668 建议使用 Pillow.Image 和 .ImageDraw 没有成功,可能还有 ImageMagick)。感谢您的建议!

标签: python-3.x tkinter tkinter-canvas


【解决方案1】:

使用 Pillow.ImagePillow.ImageDraw 而不是 tkinter 适用于我的场景。 (归功于@acw1668)

我的项目只画线、圆和多边形——ImageDraw 可以做的所有事情。从一个切换到另一个的过程非常简单,Docker 毫无问题地返回了 ImageDraw/Image 文件!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-01
    • 1970-01-01
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-16
    • 2014-08-05
    相关资源
    最近更新 更多