首页 > 代码库 > asp.net生成缩略图、文字图片水印

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                     else138                     {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             try170             {171                 //以jpg格式保存缩略图172                 bitmap.Save(thumbnailPath, System.Drawing.Imaging.ImageFormat.Jpeg);173             }174             catch (System.Exception e)175             {176                 throw e;177             }178             finally179             {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                         try211                         {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                     else224                     {225                         Label1.Text = "提示:文件已经存在,请重命名后上传";226                     }227                 }228                 else229                 {230                     Label1.Text = "提示:文件类型不符";231                 }232 233             }234         }
View Code