Насколько быстрым является модуль ImageDraw Python Image Library (PIL), например, по сравнению с OpenGL? - PullRequest
0 голосов
/ 27 марта 2011

У меня есть несколько изображений .png, и я хочу иметь возможность быстро:

(a) Загрузить файл .png из файла. (б) Нарисуйте несколько простых линий поверх .png. (c) Получить содержимое (байты) полученного изображения для возврата в результате запроса http.

Похоже, PIL - хороший кандидат для этого с относительно небольшим количеством кода. Однако я пытаюсь понять, насколько это эффективно, особенно когда у меня есть, скажем, тысячи линий, которые нужно нарисовать на этапе (b). Альтернативой является использование PyOpenGL, но прежде чем углубиться в это, я хотел понять, достаточно ли быстр PIL.

Я собирался спросить, использовал ли PIL OpenGL под одеялом. Но это может быть неправильный вопрос, потому что, насколько я понимаю, чтобы получить реальную выгоду от PyOpenGL, я бы хотел представить вершины моей линии в виде массивов NumPy. Так что, вероятно, даже если PIL использует OpenGL, я потеряю большую часть этого преимущества, когда сделаю отдельный вызов PIL, чтобы нарисовать каждую из моих линий?

У кого-нибудь есть конкретные данные о скорости PIL при рисовании большого количества примитивов?

1 Ответ

2 голосов
/ 27 марта 2011

"Нарисуйте несколько простых линий поверх .png" не является сложной вычислительной задачей.

Похоже, это не лучший кандидат для графического процессора, поскольку они лучше подходят для более сложных задач.Вы должны понимать, что образ изначально загружается в ОЗУ, поэтому ваша задача - отправить эти данные в память графического процессора и затем извлечь их обратно.Эта операция занимает несколько миллисекунд, в зависимости от размера изображения, которые могут быть лучше использованы для обработки ЦП.

Ваше приложение получит выгоду от графического процессора, только если оно имеет высокую арифметическую интенсивность.

...