Самая быстрая библиотека изменения размера изображения на C/С++
Я пишу приложение, которое должно изменять размеры огромного количества изображений... и это мои требования:
- C/С++
- Поддержка jpeg/png как минимум
- Fast
- Cross-Platform
До сих пор мои варианты:
- OpenCV
- CImg
- ImageMagick
- GraphicsMagick (он сказал, что он быстрый)
- DevIL
- GIL из Boost
- CxImage
- Imlib2 (он говорит быстро)
- Любые другие?
Все это выполнило бы работу, но я ищу самый быстрый здесь, и я не смог найти никаких тестов производительности.
Ответы
Ответ 1
Взгляните на Intel IPP (интегрированные первичности производительности) (ссылка Wiki лучше, чем Intel...), она также работает на AMD и имеет функции для изменения размеров изображений (билинейного, ближайшего соседа и т.д.) И работает в Linux и Windows.
Это не бесплатно (но это не сломает банк), но это самое быстрое, что вы можете найти.
Ответ 2
Взгляните на VIPS. Это самый быстрый, который я нашел до сих пор.
Ответ 3
Если IPP делает то, что вам нужно ( например, функция Resize в разделе 12), то я сомневаюсь, что вы найдете значительно более быстрый x86-код в другом месте. Помните, что при запуске на процессорах AMD он может вернуться к более медленным "ссылочным реализациям".
Если процессор не соответствует вашим требованиям к производительности, вы можете подумать о том, чтобы направить изменение размера на графический процессор с использованием OpenGL (простейшая реализация с использованием сопоставления текстур выиграет от аппаратных интерполяторов, для более сложной фильтрации используется шейдерный код GLSL). Способность графического процессора делать такие вещи примерно в сто раз быстрее, чем процессор (давать или принимать нуль) должна быть сопоставлена с относительно медленной передачей данных на карту и обратно (обычно это гигабайт или два в секунду максимум).
Ответ 4
@Крис Бекке:
"задумайтесь на мгновение об этом утверждении. Какая часть его выполнения на одном (сложном) шаге будет делать это быстрее? Процедуры декодирования изображения по-прежнему должны декодировать каждый пиксель, чтобы подпрограммы фильтра фильтруйте их."
Это не всегда так. Например, при декодировании JPEG вы можете попросить библиотеку JPEG дать вам изображение размером 1/2, 1/4, 1/8 (или что-то в этом роде, через некоторое время, так как я подробно рассмотрел), который он может без необходимости расшифровывать дополнительные детали вообще, из-за того, как работает JPEG. Это может быть намного быстрее, чем полная шкала декодирования +.
(Очевидно, вам может понадобиться масштабировать бит после этого, если меньшее изображение не соответствует точному размеру.)
(Извините, но я могу опубликовать этот комментарий только как комментарий из-за отсутствия репутата. В первый раз я попытался опубликовать что-нибудь здесь. Если кто-то захочет повторить это или что-то подобное комментарию и удалить мой ответ, не стесняйтесь! )
Ответ 5
Если вы ищете бесплатный материал и хотите быстро сделать что-то, попробуйте разработать плагин с компиляцией Gimp C: это очень просто, и я думаю, что Gimp отлично справляется с изменением размера:
Это может быть не самый быстрый размер, но самый дешевый (бесплатный) и самый быстрый для разработки.
Посмотрите там.
Ответ 6
Если вы ищете open source, как насчет FreeImage? Для коммерческих вещей я использую Snowbound. Оба они довольно быстр и способны к различным форматам изображений и алгоритмам изменения размера.