当前位置: 代码迷 >> VC/MFC >> 使用GDI+对png图片进展有损压缩
  详细解决方案

使用GDI+对png图片进展有损压缩

热度:183   发布时间:2016-05-02 03:50:06.0
使用GDI+对png图片进行有损压缩

最近在使用GDI+对png图片进行压缩。使用的是Gdiplus::Bitmap,代码如下:

  GetEncoderClsid(L"image/png", &bmpClsid);
   
   EncoderParameters encoderParameters;
   encoderParameters.Count = 1;
   encoderParameters.Parameter[0].Guid = EncoderCompression;
   encoderParameters.Parameter[0].Type = EncoderParameterValueTypeLong;
   encoderParameters.Parameter[0].NumberOfValues = 1;
   quality = 0 ;
   encoderParameters.Parameter[0].Value = &quality;

其中 encoderParameters.Parameter[0].Guid = EncoderQuality;也试过,只有输出的图片格式为jpg的时候。输出的文件大小才会压缩到比较满意的大小。比如原图100k,压缩到30k左右。然而输出为png格式时,采用任何参数都不顶用,且要比原图还要大,比如400M的图片,压缩后到500M。

 因为原图是png需要支持部分透明,所以不能采用jpg作为输出,先后采用多种办法,都宣告失败。

之后尝试使用opencv2,同样的问题,png图片,都是各种修改参数都几乎是相同大小,且输出比原图还大,这样是满足不了需求的。

第三次采用了传说的CxImage,在加载400Mpng时直接报错,加载不进去。三种方法都基本满足不了需求。

求问大神支招:

问题条件:原图大小:400M以上大png图,中间需要支持部分透明。压缩后可以接受有损。需要实现输出文件大概10倍文件大小png图片的压缩。

有更好的办法,或者对上述gdi+压缩有经验的大神,请求指点,不胜感激。

 
------解决思路----------------------
建议使用Image Optimizer软件。
  相关解决方案