Платформа .NET не предоставляет никаких параметров сжатия файлов PNG . Хотя встроенная поддержка подходит для большинства задач, которые у меня были до сих пор, у меня есть высокие требования к производительности, которые я надеюсь решить, используя меньшее сжатие и компенсируя это более высоким использованием памяти.
Я видел, что в NuGet доступно множество библиотек PNG, но из-за огромного количества результатов поиска мне трудно выбрать одну из них.
Вы работали с одной из этих библиотек и можете ли вы порекомендовать действительно быструю?
Целевая платформа .NET — 4.5; более высокие версии приемлемы.
Я пытался:
Save()
методаGetImage().SaveAsPng()
метод не имеет параметров для изменения сжатияВы можете попробовать net-vips , привязку C # для libvips . Это ленивая, потоковая библиотека обработки изображений, управляемая запросами, поэтому она может выполнять подобные операции без необходимости загрузки всего изображения. NetVips совместим с .NET Standard >= 2.0 и .NET Framework >= 4.5.
Вы можете преобразовать изображение JPG в PNG следующим образом:
using Image image = Image.NewFromFile("image.jpg", access: Enums.Access.Sequential);
image.WriteToFile("image.png", new VOption
{
{"compression", 9} // zlib compression 1-9
});
// Or: image.Pngsave("image.png", compression: 9);
См. документацию API libvips для vips_pngsave
(операция, вызываемая WriteToFile
) для получения подробной информации о том, какие аргументы поддерживаются.
Могу ли я предложить вам заглянуть в ImageMagick , эта библиотека существует с 1990 года и является очень зрелой. Это собственная библиотека с доступной версией .NET.
Версия для командной строки определенно поддерживает указание уровня сжатия PNG; см. этот пост StackOverflow . Но я не нашел точного кода, который вам понадобится в реализации .NET.
Версия .NET https://magick.codeplex.com/
В качестве примечания он также поддерживает OpenCL, но я не знаю, использует ли это код сохранения PNG. (если это произойдет, это значительно улучшит вашу экономию времени)
Bitmap
, чтобы сделать снимок экрана, а затем использую MagickImage
для сохранения файла. Это увеличило загрузку ЦП с ~ 4% до ~ 10%, поэтому у меня нет никакой выгоды.
Рагху Арига