2013-10-28 4 views
1

сообщество разработчиков и разработчиков imageresing.net.imageresizer.net оценка производительности

Просьба уточнить мне некоторые подробности об импортерах imageresing.net.

  1. Использует ли imageresing.net библиотеку .NET для повторного сжатия jpegs? Если нет - использует ли он сторонний движок или некоторые внутренние алгоритмы?

  2. Есть ли тесты производительности? Я хотел бы сравнить imageresing.net с другими библиотеками: libjpeg, Intel Integrated Performance Primitives и т.д.

Спасибо заранее,

Антон

ответ

7

ImageResizer предлагает 3 трубопроводов изображений.

  1. GDI + (System.Drawing) По умолчанию. Двухпроходное высококачественное бикубическое с предварительным сглаживанием. Очень быстрое качество. (Среднее 200-300 мс для изменения размера.) Недавнее обновление Windows делает GDI + распараллеливать плохо, но это активно исследуется MSFT.
  2. WIC (какой WPF также использует). 4-8x быстрее (20-200ms для изменения размера). Однократное изменение размера вызывает много муаровых артефактов и вызывает размытость (как в режимах Fant, так и в бикубике). В Windows Imaging Components нет действительно высококачественного изменения размера.
  3. FreeImage. Если вам нужна поддержка форматов DSLR или доступ к повторной выборке Lanczos (качество верхнего уровня), FreeImage - это ваша библиотека. Это медленнее, чем другие (часто 800-2400 мс), большие, монолитные и трудно проверяются, поэтому мы рекомендуем использовать его только с достоверными данными изображения. Мы используем пользовательскую версию FreeImage, встроенную в libjpeg-turbo, которая значительно быстрее, чем libjpeg.

Вы можете комбинировать и согласовывать кодировщики, декодеры и (в некоторой степени) алгоритмы изменения размера. Некоторые алгоритмы реализованы внутренне по качественным причинам, в то время как большинство из них реализовано в C/C++ в зависимостях.

В конце концов сравнение бенчмаркинг является абсурдным, если вы заботитесь о качестве фотографии, поскольку вы никогда не сможете сравнить яблоки с яблоками. Назад в 2011, I did some benchmarks between GDI+ and WIC, но фотографы и графические дизайнеры, как правило, считают качество изображения WIC неприемлемым, поэтому это не особенно справедливо.

Мы регулярно бенчмарк каждый трубопровод против себя обнаруживать улучшения производительности или регрессию, но сравнение трубопроводов может быть обманчивым для Спальных причин:

  1. Вы заботитесь о метаданных? libjpeg-turbo (wierdly) в 2-3 раза быстрее при чтении jpegs при отключении анализа метаданных. Если вы хотите автоматически повернуть на основе данных exif камеры, вам понадобится эта информация.
  2. Вы заботитесь о правильности цвета? Jpeg не является форматом RGB. Если у него есть профиль ICC, правильная вещь - преобразовать в sRGB перед изменением размера. Это медленно.
  3. Вас интересует изменение размера? Существует 100 способов реализации бикубического фильтра изменения размера. Некоторые быстрые, некоторые медленные, самые уродливые, некоторые точны. Bicubic WIC! = Bicubic GDI +. Вы можете получить < 20 мс в конец из ImageResizer WIC в режиме ближайшего соседа - если вы классны с визуальными результатами.
  4. Вы заботитесь о размере выходного файла? Если вы захотите потратить больше тактовых циклов, вы можете получить 30-80% сокращение размеров файлов PNG/GIF и 5-15% в jpeg. Если вы хотите добавить 150-600 мс на запрос, ImageResizer может создавать изображения WebP, которые сокращают вдвое ваши расходы на пропускную способность (WebP более дорогостоящий для кодирования, чем jpeg).

Вы можете ознакомиться с микро-критериями (это libjpeg-turbo на 40% быстрее, чем libjpeg при тех же обстоятельствах и т. Д.). Вы даже можете сравнить некоторые простые фильтры низкого качества изображения (ближайший сосед, поле, билинейный) после исключения кодирования, декодирования и преобразования цвета.

Проблема в том, что действительно высококачественное изменение размера действительно сложное и никогда не реализуется одинаково дважды. Существует довольно малое количество высококачественных реализаций и еще меньшее количество, которые имеют второстепенную производительность. Я заказал дюжину учебников по обработке изображений, чтобы увидеть, могу ли я найти ссылочную реализацию, но тема ... экспертно избегана большинством и лишь ненадолго затронута другими. Обработка пиксельных пикселов, предварительная фильтрация и оптимизация производительности - никогда не упоминается.

Я финансировал много исследований по быстрому изменению размера изображения высокого качества, но мы еще не смогли сопоставить GDI +. Конфигурация ImageResizer по умолчанию имеет тенденцию бить качество Photoshop на многих типах изображений.

Четвертый трубопровод может быть добавлен в ImageResizer в ближайшем будущем на основе нашей вилки libgd с пользовательскими алгоритмами изменения размера. Никаких обещаний пока нет, но у нас может быть что-то почти как высокое качество, как GDI + с аналогичной однопоточной (но лучшей одновременной) производительностью.

Весь наш исходный код находится на GitHub, поэтому, если вы найдете что-то быстрое, что вы хотели бы использовать в качестве плагина или альтернативного конвейера, нам бы хотелось услышать об этом.

Смежные вопросы