Библиотеки для 2D рисования на C/C++

Ниже рассмотрены библиотеки на C/C++, которые могут быть использованы в основе разработки библиотеки для генерации 2D финансовых графиков и индикаторов технического анализа.

Основными требованиями являются:

  • Наличие C/C++ API.
  • Наличие адекватной документации с примерами.
  • Наличие Python-пакета для экспериментов.
  • Относительно высокая скорость работы Python-пакета при рисовании >30000 линий.
  • Правильная работа со шрифтами, поддержка пиксельных шрифтов и возможность отключения сглаживания.

Итог к рассмотрению:

  • Pillow для работы в Python — быстрый, наличие документации.
  • gMagick++ или Magick++ для расширения C/C++ — быстрые, хорошо документированы на сайте ImageMagick.
  • SKIA или Cairo для работы с векторной графикой.

GraphicsMagic (Magick++)

Расширение для C++ форка GraphicsMagick библиотеки ImageMagick. С помощью библиотеки можно рисовать, обрабатывать картинки и сохранять в различных форматах. В отличии от родителя (IMagick) разработчики делают упор на производительности, оптимизации и безопасности.

Сайт: http://www.graphicsmagick.org/
Примеры: http://www.imagemagick.org/Magick++/Image++.html

Расширение для C++: http://www.graphicsmagick.org/Magick++/
Расширение для Python: https://github.com/hhatto/pgmagick

Python-пакет PgMagick может работать как с GraphicsMagick, так и с ImageMagick. Библиотека интегрирована в Python с помощью Python-Boost. В отличие от Wand-Py работает в десятки раз быстрее, но при этом имеет худшую документацию для Python (надо все искать в документации C++-расширения Magick++).

ImageMagick (Magick++)

Расширение для C++ популярной библиотеки ImageMagick (IMagick). С помощью библиотеки можно рисовать, обрабатывать картинки и сохранять в различных форматах.

Сайт: http://imagemagick.org/script/index.php
Примеры: http://www.imagemagick.org/Magick++/Image++.html

Расширение для C++: http://imagemagick.org/Magick++/
Расширение для Python: http://docs.wand-py.org/
Пример IPython: https://gist.github.com/emcconville/a0dd134bfa2b12c96377

Wand-Py работает крайне медленно по сравнению с Pillow (форк стандартной библиотеки PIL для Python). Не удалось решить проблемы со шрифтами (добавляет сглаживание и размытие).

Cairo

Библиотека написанная на C для рендеринга векторной графики. Содержит функции для рисования двумерных изображений. Преимуществом отмечается (на форумах) хорошая документация. Работает медленнее SKIA (есть сравнение в интернете).

Сайт: https://www.cairographics.org/
Примеры: https://www.cairographics.org/samples/

Расширение для C++: https://www.cairographics.org/cairomm/
Расширение для Python: http://pythonhosted.org/cairocffi/

SKIA

Графическая библиотека написанная на C++ для рендеринга векторной графики. Используется в Google Chrome, Chrome OS, Mozilla Firefox, Android. Поддерживается Google. Куцая документация, но есть примеры. По сравнению с Cairo работает быстрее.

Сайт: https://skia.org/
Примеры: https://skia.org/user/api/skcanvas

Расширение для Python: https://github.com/expobrain/python-skia

AGG (Anti-Grain)

Библиотека растровой графики написанная на C++. Последняя версия выпущена в 2006 году. Есть предположение, что данная библиотека лежит в основе PIL для Python (и Pillow).

Сайт: http://www.antigrain.com/

GD

Библиотека для работы с растровой графикой написанная на C. Популярна в PHP. В Python с похожим функционалом доступен пакет Pillow, который и рекомендуется использовать.

Сайт: https://libgd.github.io/
Примеры: https://libgd.github.io/pages/faq.html

Расширение для Python: https://github.com/Solomoriah/gdmodule

Pillow (Python-пакет)

Форк стандартной библиотеки PIL для Python. Работает быстро. Корректно работает со шрифтами. Документации мало, но разобраться можно.

Сайт: http://pillow.readthedocs.io/
Примеры: http://pillow.readthedocs.io/en/3.3.x/reference/ImageDraw.html

Другое

Группированный список различных библиотек для C/C++ с кратким описанием и ссылкой на источник.

https://github.com/fffaraz/awesome-cpp