今天图片上传的时候,一张图片宽高有4000*7000左右(只有1.3M左右),然后按照以前的方法,生成了100多兆的图
然后,问题就来了
找了老半天,虽然刚开始也有百度到 EncoderParameter p类似这个的,但是那时候没注意,总觉得不是所需要的,感觉是其他保存形式
后来实在是没找到什么解决办法,就干脆拿来试一试
EncoderParameter p; EncoderParameters ps; ps = new EncoderParameters(1); long[] qualityArray = new long[1]; qualityArray[0] = request.Quality; p = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qualityArray); ps.Param[0] = p; image.Save(path, ImageUtil.GetCodecInfo("image/jpeg"), ps);
public static ImageCodecInfo GetCodecInfo(string mimeType) { ImageCodecInfo[] CodecInfo = ImageCodecInfo.GetImageEncoders(); foreach (ImageCodecInfo ici in CodecInfo) { if (ici.MimeType == mimeType) { return ici; } } return null; }
开始直接拿了网上的,结果总是不对,要不参数错误,要不就提示null
总不得其然
问了问同事,拿了以前项目的代码才发现是
long[] qualityArray = new long[1]; qualityArray[0] = request.Quality;
这个参数拿的是long[]数据,当然有重载,long直接一个值的好像也是有的,没试。
设置后,图片的大小就变得超级小了。
即使设置了100的压缩质量,也是比原图小的,至于这个设置就不是特别清楚了。
总的来说,解决了问题,就不用这么头疼了。