如何减少c#中的j2k文件大小?

如何减少c#中的j2k文件大小?,c#,freeimage,jpeg2000,C#,Freeimage,Jpeg2000,我使用FreeImageNet.dll压缩j2k文件(100KB),使用各种FREE_IMAGE_LOAD_标志 示例代码在这里 string fileName=abc.jpg; string outFileName=xyz.j2k; FREE_IMAGE_FORMAT imageFormat = FREE_IMAGE_FORMAT.FIF_J2K; dib = new FIBITMAP(); dib = FreeImage.Load

我使用FreeImageNet.dll压缩j2k文件(100KB),使用各种FREE_IMAGE_LOAD_标志

示例代码在这里

      string fileName=abc.jpg;
      string outFileName=xyz.j2k;
      FREE_IMAGE_FORMAT imageFormat = FREE_IMAGE_FORMAT.FIF_J2K;

      dib = new FIBITMAP();
      dib = FreeImage.LoadEx(fileName, FREE_IMAGE_LOAD_FLAGS.DEFAULT);
      FreeImage.SaveEx(dib, outFileName, imageFormat,FREE_IMAGE_SAVE_FLAGS.JPEG_QUALITYSUPERB);
      dib.SetNull();
我得到了7KB的压缩文件,原始图像和压缩图像之间的差异是可见的

我如何将图像压缩到30 KB而没有明显差异


提前感谢。

您将压缩定义为一个比率,JP2将达到16:1

这是一种有损压缩,因此并非所有图像都能在相同的压缩比下获得相同的美学质量。这取决于图像的内容

要设置该值,只需传入整数值1-16并像

FreeImage.Save(FREE_IMAGE_FORMAT.FIF_JP2, dib, newName, (FREE_IMAGE_SAVE_FLAGS)Properties.Settings.Default.JPEG2000CompressionRateXto1);

用另一种压缩方法重新压缩压缩后的图像格式通常是个坏主意。JPEG_QUALITYSUPERB仅适用于JPEG编码器,从JP2_默认值开始(这可能是您现在得到的),然后尝试一个整数,从100开始。我找不到这些标志。。JP2_DEFAULT和J2K_DEFAULT,当我将整数值作为标志传递时,它会显示一个错误。标志仅接受0值。0==JP2_DEFAULT。Jpeg2000是一种被忽略的图像文件格式。您不需要。当我传递标志值0时,我的图像压缩到54KB,没有可见差异。这是唯一的选项吗?我可以手动定义压缩值吗?这几乎是正确的,JP2/J2K插件的“标志”实际上被解释为速率。然而,它实际上上升到1023,实际的代码行读取
参数