一个页面加载图片太多的时候就很慢,需要用到缩略图,可以在图片上传的时候生成。
Image对象已经包含了压缩图片的方法。
所以过程很简单:
[AcceptVerbs(HttpVerbs.Post)] public JsonResult Upload(HttpPostedFileBase fileData) { //..... var extension = Path.GetExtension(fileName);// 文件扩展名 if (extension != null) { string image = extension.ToLower();//System.IO.Path.GetExtension获得文件的扩展名 if (image == ".bmp" || image == ".png" || image == ".gif" || image == ".jpg") { //压缩。 var thumpath = filePath + "samll_" + fileName GetThumbnail(savepath, thumpath, 150); } } //.... } /// <summary> /// 按比例 存放缩略图片 /// </summary> /// <param name="sourceFileName">原始地址</param> /// <param name="saveFileName">存放地址</param> /// <param name="width">宽度</param> public void GetThumbnail(string sourceFileName, string saveFileName, int width) { var iSource = Image.FromFile(sourceFileName); var height = width*iSource.Height/iSource.Width; var samllimg = iSource.GetThumbnailImage(width, height, null, IntPtr.Zero); samllimg.Save(saveFileName); }
160k 到 35k ,当然还可以更小。MSDN的对方法参数的解释:
且缩略图默认
园友的方法,可以调节清晰度。相对复杂些。
public static bool GetPicThumbnail(string sFile, string outPath, int flag) { System.Drawing.Image iSource = System.Drawing.Image.FromFile(sFile); ImageFormat tFormat = iSource.RawFormat; //以下代码为保存图片时,设置压缩质量 EncoderParameters ep = new EncoderParameters(); long[] qy = new long[1]; qy[0] = flag;//设置压缩的比例1-100 EncoderParameter eParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy); ep.Param[0] = eParam; try { ImageCodecInfo[] arrayICI = ImageCodecInfo.GetImageEncoders(); ImageCodecInfo jpegICIinfo = null; for (int x = 0; x < arrayICI.Length; x++) { if (arrayICI[x].FormatDescription.Equals("JPEG")) { jpegICIinfo = arrayICI[x]; break; } } if (jpegICIinfo != null) { iSource.Save(outPath, jpegICIinfo, ep);//dFile是压缩后的新路径 } else { iSource.Save(outPath, tFormat); } return true; } catch { return false; } finally { iSource.Dispose(); iSource.Dispose(); } }