【问题标题】:How fast is Python Image Library's (PIL) ImageDraw Module, for instance as compared to OpenGL?例如,与 OpenGL 相比,Python 图像库 (PIL) ImageDraw 模块的速度有多快?
【发布时间】:2011-07-23 17:46:09
【问题描述】:

我有一些 .png 图像,我希望能够快速:

(a) 从文件加载 .png。 (b) 在 .png 的顶部画一些简单的线条。 (c) 获取结果图像的内容(字节)以作为 http 请求的结果返回。

听起来 PIL 很适合用相对较少的代码执行此操作。但是,我试图了解它的效率,尤其是当我在步骤 (b) 中要绘制数千条线时。另一种方法是使用 PyOpenGL,但在开始之前,我想了解 PIL 是否已经足够快。

我想问一下 PIL 是否在幕后使用了 OpenGL。但这可能是一个错误的问题,因为我的理解是,为了从 PyOpenGL 中获得真正的速度优势,我想将我的线顶点作为 NumPy 数组提交。所以大概即使 PIL 使用 OpenGL,当我进行单独的 PIL 调用来绘制我的每条线时,我也会失去很多好处?

在绘制大量图元时,有人有关于 PIL 速度的具体数据吗?

【问题讨论】:

  • 要使用 OpenGL,您需要一个 OpenGL 上下文。如果您计划从无头服务器(如 http 请求响应要求所暗示的那样)使用此软件,这可能会很困难。
  • @tkerwin:获取无头上下文的难度因操作系统而异。希望@M Katz 能让我们更多地了解环境。当然,总是可以创建隐藏窗口,但在某些环境中可能无法加速。
  • 当然正确,我也不确定,但我猜如果加速,使用 OpenGL 会比 PIL 更快,否则会更慢。
  • 我对我的服务器的控制权比某些人多,尽管我不确定他们是否总是有 GPU(“无头”是指“缺少 GPU 并且可能根本没有显卡, “ 正确的?)。但是,我希望通过使用 OpenGL,如果它存在,我将获得硬件加速,如果它不存在,我将获得良好的软件渲染。不是这样吗?我的理解是 OpenGL 比“窗口”概念低级,所以我可以做任何我想要的绘图,不管它是否可以实际显示在那个系统上。

标签: python opengl python-imaging-library gpu


【解决方案1】:

“在 .png 上画一些简单的线条” 不是一项计算密集型任务。

这似乎不是 GPU 的理想选择,因为它们更适合更复杂的任务。您必须意识到图像最初是加载到 RAM 中的,因此您的工作就是将此数据发送到 GPU 内存,然后再将其取回。此操作会消耗几毫秒,具体取决于图像的大小,这可以更好地用于 CPU 处理。

您的应用程序只有在具有高算术强度的情况下才能从 GPU 中受益。

【讨论】:

  • 我认为 OpenGL 和/或硬件加速的优势通常不仅仅是计算旋转等,而是简单地快速处理大量绘图动作(如果在单个调用中提交)。因此,即使没有太多要“计算”的东西,绘制一万个点或几条线会更快(比以更高级别的方式绘制它)。没有?
  • 目前尚不清楚这种量级的东西在 GPU 上是否会更快。我鼓励您先编写一个 CPU 应用程序来执行此操作。
  • 好的,谢谢。我将尝试使用 PIL 进行一些实验并报告我的发现......
  • 那么在你的实验@MKatz 之后你发现了什么?
  • @MKatz 感谢您在十年后回到这篇文章并分享这些信息。我相信它会在未来对其他人有所帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-05
  • 2011-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-29
  • 1970-01-01
相关资源
最近更新 更多