使用.NET使图像渐进且无损

时间:2014-03-05 07:46:23

标签: .net jpeg freeimage progressive lossless

我需要一个DLL或没有exe文件的.NET代码来制作渐进式无损jpeg(.jpg,而不是几个浏览器不支持的JPEG 2000或JPEG-LS)因为我正在使用共享主机我无法执行.exe文件。我正在使用freeImage,它应该这样做,但它不会产生无损jpeg(我已经获得了渐进的jpeg)。

这是我的freeImage代码:

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应用程序或Web执行shell命令。

如果执行此命令:

jpegtran -copy none -optimize -progressive inputPath.jpg outputPath.jpg

你会得到一个渐进的无损jpeg文件

我已经使用它并且它可以工作,但我需要在没有exe文件的情况下这样做。

1 个答案:

答案 0 :(得分:1)

查看LibJpeg.Net:http://bitmiracle.com/libjpeg/它基本上是C#中的IJG库。因为它是一个相当低级别的lib(它必须用来调整DCT系数),最好的方法是获取jpegtrans源代码,看看他们是如何做到的,并在LibJpeg.Net中做同样的事情(函数有相同的名字,。 ..)

<强> EDIT1 : 你需要使用LibJpeg.Net的“Classic”API。在那里你需要一个decopmpressor和压缩器,但你想要传递DCT系数,而不是解码和编码图像。查找jpeg_write_coefficientsjpeg_read_coefficients