Ниже рассмотрены библиотеки на 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++ с кратким описанием и ссылкой на источник.