一、调用处
int maxSize = 100000;//单位字节
var savePathName = "XXXXXX.jpg";
var imageStream = new MemoryStream(item.ZP);
Bitmap bitmap = new Bitmap(imageStream);
ImageHelper.CircleCompress(bitmap, savePathName, 100, maxSize);
二、实现处
public static void CircleCompress(Bitmap srcBitMap, string destFile, long level, long length)
{
Stream s = new FileStream(destFile, FileMode.Create);
Compress(srcBitMap, s, level);
if (s.Length > length)
{
s.Close();
level = level - 10;
if (level < 0)
return;
if (File.Exists(destFile))
{
File.Delete(destFile);
}
CircleCompress(srcBitMap, destFile, level, length);
}
s.Close();
srcBitMap.Dispose();
}
public static void Compress(Bitmap iSource, Stream cStream, long level)
{
ImageCodecInfo myImageCodecInfo;
System.Drawing.Imaging.Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
// Get an ImageCodecInfo object that represents the JPEG codec.
myImageCodecInfo = GetEncoderInfo("image/jpeg");
// Create an Encoder object based on the GUID
// for the Quality parameter category.
myEncoder = System.Drawing.Imaging.Encoder.Quality;
// 创建一个 EncoderParameters 对象.
// 一个 EncoderParameters 对象有一组EncoderParameter对象
// 在下面的代码中,EncoderParameters数组中只有一个EncoderParameter对象
myEncoderParameters = new EncoderParameters(1);
// 用给定的Level值压缩图片
myEncoderParameter = new EncoderParameter(myEncoder, level);
myEncoderParameters.Param[0] = myEncoderParameter;
iSource.Save(cStream, myImageCodecInfo, myEncoderParameters);
}