最近在使用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软件。