在做一个网站的时候需要控制上传图片的压缩,如果图片大于一定的尺寸的话,我就设置一定的比例来压缩,但是这个压缩比例怎么都不对,也不知道是什么原因,现贴出源码来,请大家指正 long size = pic.PostedFile.ContentLength / 1024;
long rate= 40000/size ;
if (size >400)
{
minusPhoto(pic.FileContent,rate, picpath);
}
else
{
pic.SaveAs(picpath);
}//调用到的方法:
public static void minusPhoto( Stream s, long quality,string savepath)
{
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myBitmap = new Bitmap(s);
myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save(savepath , myImageCodecInfo, myEncoderParameters);
myBitmap.Dispose();
myEncoderParameter.Dispose();
myEncoderParameters.Dispose();
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
上面我想把图片大小控制在400KB以内,结果我按上面的这种方法弄出来的要比按正常比例压缩出来的小了很多,比如说按道理我上传一个1M的东西,那么,压缩以后的差不多就400KB左右吧,结果只有100多KB,实在是不知道为什么,请各位高手指教,在此谢谢大家了
long rate= 40000/size ;
if (size >400)
{
minusPhoto(pic.FileContent,rate, picpath);
}
else
{
pic.SaveAs(picpath);
}//调用到的方法:
public static void minusPhoto( Stream s, long quality,string savepath)
{
Bitmap myBitmap;
ImageCodecInfo myImageCodecInfo;
Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myBitmap = new Bitmap(s);
myImageCodecInfo = GetEncoderInfo("image/jpeg");
myEncoder = Encoder.Quality;
myEncoderParameters = new EncoderParameters(1);
myEncoderParameter = new EncoderParameter(myEncoder, quality);
myEncoderParameters.Param[0] = myEncoderParameter;
myBitmap.Save(savepath , myImageCodecInfo, myEncoderParameters);
myBitmap.Dispose();
myEncoderParameter.Dispose();
myEncoderParameters.Dispose();
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
上面我想把图片大小控制在400KB以内,结果我按上面的这种方法弄出来的要比按正常比例压缩出来的小了很多,比如说按道理我上传一个1M的东西,那么,压缩以后的差不多就400KB左右吧,结果只有100多KB,实在是不知道为什么,请各位高手指教,在此谢谢大家了
http://topic.csdn.net/u/20100327/22/56c2cfdc-dc1c-47c5-99d7-ad1f5bcab837.html?76691