图片上传 加水印 以及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         }

 

posted @ 2018-08-22 14:50  这个问题解决不了  阅读(213)  评论(0编辑  收藏  举报