图片上传 加水印 以及GDI基本画图
上传图片并给所上传的图片添加水印
1 HttpPostedFile file = Context.Request.Files[0]; //有这个0说明一次只能上传一张 2 if (file.ContentLength > 0) 3 { 4 string allfilename = Path.GetFileName(file.FileName); //获取文件名称包含扩展名 5 string filenameextension = Path.GetExtension(file.FileName); // 获取文件扩展名 6 //校验文件类型 7 string[] extension = { ".jpg", ".png", ".bmp", ".jpeg", ".gif", ".svg", ".tiff" }; //将所有图片扩展名做成一个数组 8 9 10 for (int i = 0; i < extension.Length; i++) 11 { 12 if (filenameextension == extension[i]) 13 { 14 break; 15 } 16 else 17 { 18 19 } 20 if ((extension.Length - 1) == i) 21 { 22 Context.Response.Write("<script>alert('请选择图片类型!')</script>"); 23 } 24 25 } 26 27 28 //1.使用Guid对上传文件进行重新命名,以防止重名产生的覆盖问题 29 30 string newallfilename = Guid.NewGuid().ToString(); //使用Guid重新命名的文件名称 31 32 //2.将上传文件放在不同文件夹下,防止文件过多出现搜索效率降低 33 34 //以下是根据日期来创建不同的文件夹,当然也有其他方法 35 36 string dir = "/Images/" + DateTime.Now.Year + "/" + DateTime.Now.Month + "/" + DateTime.Now.Day + "/"; //这个是文件目录名 37 38 if (!Directory.Exists(Context.Request.MapPath(dir))) //判断这个文件夹是否存在,如果不存在则创建 39 { 40 Directory.CreateDirectory(Context.Request.MapPath(dir)); 41 } 42 string fullpath = dir + newallfilename + filenameextension; //文件存放的完整路径 文件夹+新的文件名+文件扩展名 43 44 file.SaveAs(Context.Request.MapPath(fullpath)); //完成文件保存 45 46 47 48 49 50 51 52 //在加水印时,如果file.SaveAs(Context.Request.MapPath(fullpath));没有注释,那么在加完水印之后就会有两张图片,一个有水印一个没有水印。 53 //在创建images实例时,如果有保存的这行代码,就可以有两种方式 一种是根据文件物理全路径,一种是根据文件流 没有保存就只能根据文件流 54 55 56 57 //给图片添加水印 58 //using (Image img = Image.FromStream(file.InputStream)) //根据文件流 59 //根据上传成功的图片创建一个img实例 60 using (System.Drawing.Image img = System.Drawing.Image.FromFile(Context.Request.MapPath(fullpath))) //根据文件物理全路径 61 { 62 using (Bitmap map = new Bitmap(img.Width, img.Height)) //根据图片的高宽来设定画布的高宽 63 { 64 using (Graphics g = Graphics.FromImage(map)) //创建一个画笔 65 { 66 g.DrawImage(img, 0, 0, img.Width, img.Height);//将整个图片画到画布上 67 g.DrawString("独家所有", new Font("楷体", 15, FontStyle.Bold), Brushes.Red, new PointF(img.Width - 60, img.Height - 15)); 68 string watherfilename = Guid.NewGuid().ToString(); 69 map.Save(Context.Request.MapPath("/Images/" + watherfilename + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg); 70 } 71 } 72 73 } 74 75 76 } 77 else 78 { 79 80 Context.Response.Write("<script>alert('请选择上传图片!')</script>"); 81 } 82 83 Context.Response.Write("<script>alert('上传图片成功!')</script>");
/// <summary> /// 做一个普通水印 /// </summary> public void GDI() { //这段也相当于是做水印 Bitmap map = new Bitmap(400,400); //创建一个画布 Graphics g = Graphics.FromImage(map);//创建一个画笔 g.Clear(Color.Gray); //清除画布并指定背景色填充 //Brushes.Yellow 指定用什么颜色填充字体 g.DrawString("要写的字", new Font("楷体", 15, FontStyle.Bold), Brushes.Yellow, new PointF(320, 80)); string filename = Guid.NewGuid().ToString(); //将画布保存为一张图片 map.Save(Context.Request.MapPath("/Images/" + filename + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg); // }
1 /// <summary> 2 /// 图片缩略图 其本质就是将一个大图画在一个小画布上面,缩略图是将图片宽高都缩小并且图片文件的实际占用内存也变小,好处是可以减少宽带的占用,快速加载出来, 3 /// </summary> 但是如果比例不正确,会导致图片变形 4 public void minipicture() 5 { 6 string fullpath = Context.Request.MapPath("/Images/aaa.jpg"); 7 using (Bitmap MAP = new Bitmap(320, 180)) 8 { 9 using (System.Drawing.Image img = System.Drawing.Image.FromFile(fullpath)) 10 { 11 using(Graphics g=Graphics.FromImage(MAP)){ 12 g.DrawImage(img, 0, 0, MAP.Width, MAP.Height); 13 string newfile = Guid.NewGuid().ToString(); 14 MAP.Save(Context.Request.MapPath("/Images/" + newfile + ".jpg"), System.Drawing.Imaging.ImageFormat.Jpeg); 15 16 } 17 18 } 19 } 20 21 }