三、生成略缩图
现在的很多博客、个人主页、空间之类的都有编辑个人信息的设置,在编辑个人信息的时候都可能会需要上传头像,下面我们来讲一下如何生成略缩头像。
页面布局的话我们还是引用上边的布局:
但是要在<table></table>再加一行,用来显示生成的略缩图。
首先我们需要新建一个CutImage类CutImage.cs,专门用来对图片进行缩放,如下:
/// <summary>(该图片缩放的代码参考自博客园博主king-两色天)
/// 截取图片
/// </summary>
/// <param>原图片路径</param>
/// <param>新图片路径</param>
/// <param>略缩图的宽度</param>
/// <param>略缩图的高度</param>
/// <param>截取模式</param>
代码:
public static void CutImg(string oPath, string nPaht, int w, int h,string mode) { Image oimg = Image.FromFile(oPath); int nToWidth = w; int nToHeight = h; int x = 0; int y = 0; int oWidth = oimg.Width; int oHeight = oimg.Height; switch (mode) { case "HW"://按照指定的宽高进行缩放,可能变形 break; case "W"://指定宽度,高按比例缩放 nToHeight = oWidth * oHeight / nToWidth; break; case "H"://指定高度,宽按比例缩放 nToWidth=oWidth*oHeight/nToHeight; break; case "CUT"://按照指定的宽、高缩放 if ((oimg.Width / oimg.Height) > (nToWidth / nToHeight)) { oHeight = oimg.Height; oWidth = oimg.Height * nToWidth / nToHeight; y = 0; x = (oimg.Width - oWidth) / 2; } else { oWidth = oimg.Width; oHeight = oimg.Width * nToHeight / nToWidth; x = 0; y = (oimg.Height - oHeight) / 2; } break; default: break; } //新建一个BMP图片 Image bitmap = new Bitmap(nToWidth, nToHeight); //新建一个画板 Graphics gp = Graphics.FromImage(bitmap); gp.InterpolationMode = InterpolationMode.High; gp.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; //清空画布,并以背景色为透明色填充 gp.Clear(Color.Transparent); gp.DrawImage(oimg, new Rectangle(0, 0, nToWidth, nToHeight), new Rectangle(x, y, oWidth, oHeight), GraphicsUnit.Pixel);//绘制出新的略缩图 try { bitmap.Save(nPaht, System.Drawing.Imaging.ImageFormat.Jpeg); } catch(Exception e) { throw e; } finally { oimg.Dispose(); bitmap.Dispose(); } }
然后我们的aspx页的btnupload按钮的Click事件的处理函数代码如下:
protected void btnupload_Click(object sender, EventArgs e) { if (FileUpload1.FileName.Trim() != "") { //....... //.......前边都省略了代码是一样的 if (File.Exists(path)) { File.Delete(path); } string p = Server.MapPath(".") + "\\images\\"; touxiangpath="~/images/" + fileName + "_New" + extension; TouXiang.ImageUrl = touxiangpath; CutImage.CutImg(newPath, p+"olive.jpg", 100, 200, "CUT");//调用缩放图片的类CutImage的CutImg函数,这里直接保存为了“olive.jpg"是为了方便下面的引用显示,也可保存为其他的名称和格式。 luesuotu.ImageUrl = "~/images/olive.jpg"; } else { Response.Write("<script>alert('请先选择要上传的文件!')</script>"); } }
生成效果如图:
为了方便大家的使用我已经把图片缩放功能封装成了一个类,里边还有其他的一些缩放的功能,已经导出了类模板,有兴趣的朋友可以点击下载ImageCut.zip,希望可以给大家一些帮助。
您可能感兴趣的文章: