【发布时间】: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.Image和Pillow.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