asp.net生成缩略图、文字图片水印

  1        /// <summary>
  2         /// 会产生graphics异常的PixelFormat
  3         /// </summary>
  4         private static PixelFormat[] indexedPixelFormats = { PixelFormat.Undefined, PixelFormat.DontCare,
  5 PixelFormat.Format16bppArgb1555, PixelFormat.Format1bppIndexed, PixelFormat.Format4bppIndexed,
  6 PixelFormat.Format8bppIndexed
  7     };
  8 
  9 
 10         /// <summary>
 11         /// 判断图片的PixelFormat 是否在 引发异常的 PixelFormat 之中
 12         /// </summary>
 13         /// <param name="imgPixelFormat">原图片的PixelFormat</param>
 14         /// <returns></returns>
 15         private static bool IsPixelFormatIndexed(PixelFormat imgPixelFormat)
 16         {
 17             foreach (PixelFormat pf in indexedPixelFormats)
 18             {
 19                 if (pf.Equals(imgPixelFormat)) return true;
 20             }
 21 
 22             return false;
 23         }
 24 
 25        /// <summary>
 26         /// 在图片上生成图片水印
 27         /// </summary>
 28         /// <param name="Path">原服务器图片路径</param>
 29         /// <param name="Path_syp">生成的带图片水印的图片路径</param>
 30         /// <param name="Path_sypf">水印图片路径</param>
 31         public static void AddShuiYinPic(string Path, string Path_syp, string Path_sypf)
 32         {
 33             System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
 34             System.Drawing.Image copyImage = System.Drawing.Image.FromFile(Path_sypf);
 35             System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
 36             g.DrawImage(copyImage, new System.Drawing.Rectangle(image.Width - copyImage.Width, image.Height - copyImage.Height, copyImage.Width, copyImage.Height), 0, 0, copyImage.Width, copyImage.Height, System.Drawing.GraphicsUnit.Pixel);
 37             g.Dispose();
 38 
 39             image.Save(Path_syp);
 40             image.Dispose();
 41         }
 42         /// <summary>
 43         /// 在图片上增加文字水印
 44         /// </summary>
 45         /// <param name="Path">原服务器图片路径</param>
 46         /// <param name="Path_sy">生成的带文字水印的图片路径</param>
 47         public static void AddShuiYinWord(string Path, string Path_sy)
 48         {
 49 
 50 
 51             using (System.Drawing.Image img = System.Drawing.Image.FromFile(Path))
 52             {
 53                 //如果原图片是索引像素格式之列的,则需要转换
 54                 if (IsPixelFormatIndexed(img.PixelFormat))
 55                 {
 56                     Bitmap bmp = new Bitmap(img.Width, img.Height, PixelFormat.Format32bppArgb);
 57                     using (Graphics g = Graphics.FromImage(bmp))
 58                     {
 59                         g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
 60                         g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
 61                         g.CompositingQuality = System.Drawing.Drawing2D.CompositingQuality.HighQuality;
 62                         g.DrawImage(img, 0, 0);
 63 
 64                         System.Drawing.Font f = new System.Drawing.Font("Verdana", 16);
 65                         System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Red);
 66                         g.DrawString("爱智旮旯", f, b, 15, 15);
 67                      
 68 
 69                     }
 70                     bmp.Save(Path_sy);
 71                     bmp.Dispose();
 72                     
 73                 }
 74                 else //否则直接操作
 75                 {
 76                     string addText = "爱智旮旯";
 77                     System.Drawing.Image image = System.Drawing.Image.FromFile(Path);
 78                     System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(image);
 79                     g.DrawImage(image, 0, 0, image.Width, image.Height);
 80                     System.Drawing.Font f = new System.Drawing.Font("Verdana", 16);
 81                     System.Drawing.Brush b = new System.Drawing.SolidBrush(System.Drawing.Color.Blue);
 82 
 83                     g.DrawString(addText, f, b, 15, 15);
 84                     g.Dispose();
 85 
 86                     image.Save(Path_sy);
 87                     image.Dispose();
 88                 }
 89             } 
 90 
 91 
 92 
 93 
 94 
 95 
 96          
 97         }
 98 
 99         /// <summary>
100         /// 生成缩略图
101         /// </summary>
102         /// <param name="originalImagePath">源图路径(物理路径)</param>
103         /// <param name="thumbnailPath">缩略图路径(物理路径)</param>
104         /// <param name="width">缩略图宽度</param>
105         /// <param name="height">缩略图高度</param>
106         /// <param name="mode">生成缩略图的方式</param> 
107         public static void MakeThumbnail(string originalImagePath, string thumbnailPath, int width, int height, string mode)
108         {
109             System.Drawing.Image originalImage = System.Drawing.Image.FromFile(originalImagePath);
110 
111             int towidth = width;
112             int toheight = height;
113 
114             int x = 0;
115             int y = 0;
116             int ow = originalImage.Width;
117             int oh = originalImage.Height;
118 
119             switch (mode)
120             {
121                 case "HW"://指定高宽缩放(可能变形) 
122                     break;
123                 case "W"://指定宽,高按比例 
124                     toheight = originalImage.Height * width / originalImage.Width;
125                     break;
126                 case "H"://指定高,宽按比例
127                     towidth = originalImage.Width * height / originalImage.Height;
128                     break;
129                 case "Cut"://指定高宽裁减(不变形) 
130                     if ((double)originalImage.Width / (double)originalImage.Height > (double)towidth / (double)toheight)
131                     {
132                         oh = originalImage.Height;
133                         ow = originalImage.Height * towidth / toheight;
134                         y = 0;
135                         x = (originalImage.Width - ow) / 2;
136                     }
137                     else
138                     {
139                         ow = originalImage.Width;
140                         oh = originalImage.Width * height / towidth;
141                         x = 0;
142                         y = (originalImage.Height - oh) / 2;
143                     }
144                     break;
145                 default:
146                     break;
147             }
148 
149             //新建一个bmp图片
150             System.Drawing.Image bitmap = new System.Drawing.Bitmap(towidth, toheight);
151 
152             //新建一个画板
153             System.Drawing.Graphics g = System.Drawing.Graphics.FromImage(bitmap);
154 
155             //设置高质量插值法
156             g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;
157 
158             //设置高质量,低速度呈现平滑程度
159             g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
160 
161             //清空画布并以透明背景色填充
162             g.Clear(System.Drawing.Color.Transparent);
163 
164             //在指定位置并且按指定大小绘制原图片的指定部分
165             g.DrawImage(originalImage, new System.Drawing.Rectangle(0, 0, towidth, toheight),
166             new System.Drawing.Rectangle(x, y, ow, oh),
167             System.Drawing.GraphicsUnit.Pixel);
168 
169             try
170             {
171                 //以jpg格式保存缩略图
172                 bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);
173             }
174             catch (System.Exception e)
175             {
176                 throw e;
177             }
178             finally
179             {
180                 originalImage.Dispose();
181                 bitmap.Dispose();
182                 g.Dispose();
183             }
184         }
185 
186       protected void Button1_Click(object sender, EventArgs e)
187         {
188             if (FileUpload1.HasFile)
189             {
190                 string fileContentType = FileUpload1.PostedFile.ContentType;
191                 if (fileContentType == "image/bmp" || fileContentType == "image/gif" || fileContentType == "image/pjpeg" || fileContentType == "image/jpg")
192                 {
193                     string name = FileUpload1.PostedFile.FileName; // 客户端文件路径
194 
195                     FileInfo file = new FileInfo(name);
196                     string fileName = file.Name; // 文件名称
197                     string fileName_s = "s_" + file.Name; // 缩略图文件名称
198                     string fileName_sy = "sy_" + file.Name; // 水印图文件名称(文字)
199                     string fileName_syp = "syp_" + file.Name; // 水印图文件名称(图片)
200                     //以下路径可以根据情况进行修改
201                     string webFilePath = Server.MapPath("file/" + fileName); // 服务器端文件路径
202                     string webFilePath_s = Server.MapPath("file/" + fileName_s);  // 服务器端缩略图路径
203                     string webFilePath_sy = Server.MapPath("file/" + fileName_sy); // 服务器端带水印图路径(文字)
204                     string webFilePath_syp = Server.MapPath("file/" + fileName_syp); // 服务器端带水印图路径(图片)
205                     //以下为水印图片的路径一定要先准备一张水印图片!
206                     string webFilePath_sypf = Server.MapPath("file/shuiyin.jpg"); // 服务器端水印图路径(图片)
207 
208                     if (!File.Exists(webFilePath))
209                     {
210                         try
211                         {
212                             FileUpload1.SaveAs(webFilePath); // 使用 SaveAs 方法保存文件
213                             AddShuiYinWord(webFilePath, webFilePath_sy);
214                             //AddShuiYinPic(webFilePath, webFilePath_syp, webFilePath_sypf);
215                             MakeThumbnail(webFilePath, webFilePath_s, 130, 130, "Cut"); // 生成缩略图方法
216                             Label1.Text = "提示:文件“" + fileName + "”成功上传,并生成“" + fileName_s + "”缩略图,文件类型为:" + FileUpload1.PostedFile.ContentType + ",文件大小为:" + FileUpload1.PostedFile.ContentLength + "B";
217                         }
218                         catch (Exception ex)
219                         {
220                             Label1.Text = "提示:文件上传失败,失败原因:" + ex.Message;
221                         }
222                     }
223                     else
224                     {
225                         Label1.Text = "提示:文件已经存在,请重命名后上传";
226                     }
227                 }
228                 else
229                 {
230                     Label1.Text = "提示:文件类型不符";
231                 }
232 
233             }
234         }
View Code

 

posted on 2014-06-25 17:23  走过路过ボ不要错过  阅读(158)  评论(0编辑  收藏  举报

导航