Сделайте изображение прогрессивным и без потерь с помощью.NET
Мне нужен DLL или код.NET без exe-файла, чтобы создать прогрессивный JPEG без потерь (.jpg, а не JPEG 2000 или JPEG-LS, которые не поддерживаются в нескольких браузерах), потому что я использую общий хостинг, где я могу не выполнять.exe файлы. Я использую freeImage, который должен это делать, но он не производит JPEG без потерь (я получил прогрессивный).
Это мой бесплатный код изображения:
image = FreeImage.Load(FREE_IMAGE_FORMAT.FIF_JPEG, inputPath, FREE_IMAGE_LOAD_FLAGS.JPEG_ACCURATE)
FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JPEG, image, outputPath, FREE_IMAGE_SAVE_FLAGS.JPEG_OPTIMIZE Or FREE_IMAGE_SAVE_FLAGS.JPEG_PROGRESSIVE)
Предполагается, что флаг FREE_IMAGE_SAVE_FLAGS.JPEG_OPTIMIZE делает изображение без потерь, но это не работает. Я делаю что-то неправильно?
С помощью exe-файла я мог бы решить проблему с помощью jpegtran. Чтобы получить прогрессивный jpeg без потерь, вам нужно всего лишь выполнить команду оболочки из вашего.NET-приложения или Интернета.
Если вы выполните эту команду:
jpegtran -copy none -optimize -progressive inputPath.jpg outputPath.jpg
Вы получите прогрессивный файл JPEG без потерь
Я использовал его, и он работает, но мне нужно сделать это без exe-файла.
1 ответ
Проверьте LibJpeg.Net: http://bitmiracle.com/libjpeg/ Это в основном библиотека IJG в C#. Так как это довольно низкоуровневая библиотека (она должна работать с коэффициентами DCT), лучшим способом было бы получить исходный код jpegtrans, посмотреть, как они это делают и сделать то же самое в LibJpeg.Net (функции имеют одинаковые имена,...)
EDIT1: вам нужно использовать "классический" API из LibJpeg.Net. Там вам нужен декомпрессор и компрессор, но вместо декодирования и кодирования изображений вы хотите передать коэффициенты DCT. Ищу jpeg_write_coefficients
а также jpeg_read_coefficients