C#图片处理基本应用(裁剪,缩放,清晰度,水印)

来源:互联网 发布:鼠标自动点击器 mac 编辑:程序博客网 时间:2024/05/21 10:48

C#图片处理基本应用(裁剪,缩放,清晰度,水印)

吴剑

http://wu-jian.cnblogs.com/

前言

需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示。随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图。但完美主义者会发现一些问题,比如显示排版时想让相片缩略图列表非常统一、整齐、和美观,比如要求每张缩略图大小固定为120 x 90且不拉伸变形怎么办?再比如用户头像如何让缩略图比原图更清晰?或是如何在上传的图片下加一个半透明的LOGO水印?

OK,本文根据自己的项目代码描述以上问题的解决方案,全部基于.Net Framework类库完成,代码中包含了C#图片处理的一些基础知识,与大家分享,个人能力有限,不足之处还请及时指正。

提高缩略图清晰度

(原图200*200,12.3k)(处理后80*80,17.7k)

之前一直认为缩略图不可能比原图清晰,直到某天一位产品的同事给我看某网站的效果。于是开始寻找.NET下实现代码,仔细观察缩略图确实比原图更清晰了一些,但代价是缩略图文件比原图更大,所以如果你想让一张占满显示器屏幕的超大图片更清晰,那么图片占用空间和网络流量就必需考虑了,如果是互联网应用,建议缩略图在200像素以内的使用该方法。当然如果哪位有更好的代码即能让图片文件大小变化不大又让图片更清晰还请分享。

图片裁剪

(原图256*192)(裁剪要求100*100)

(原图256*192)(裁剪要求90*120)

(原图256*192)(裁剪要求120*90)

(原图146*256)(裁剪要求100*100)

(原图146*256)(裁剪要求90*120)

(原图146*256)(裁剪要求120*90)

算法:以原图中心作为裁剪中心,最大范围的对原图进行裁剪,然后对裁剪结果等比缩放。

图片水印

仅演示了效果,如需要变更字体、水印透明度、位置等可自行在代码或方法中扩展。

代码

封装了几个通用的方法,如发现有BUG或漏洞还请及时指正。

0001 using System;0002 using System.Collections.Generic;0003 using System.Text;0004 using System.IO;0005 using System.Drawing;0006 using System.Drawing.Drawing2D;0007 using System.Drawing.Imaging;0008 namespace WuJian.Common0009 {0010     /// 0011     /// 图片处理类0012     /// 吴剑 2008-07-02 创建0013     /// 吴剑 2011-01-21 修改0014     /// 0015     public class PTImage0016     {0017         #region 正方型裁剪并缩放0018         /// 0019         /// 正方型裁剪0020         /// 以图片中心为轴心,截取正方型,然后等比缩放0021         /// 用于头像处理0022         /// 0023         /// 吴剑 2010-11-230024         /// 原图HttpPostedFile对象0025         /// 缩略图存放地址0026         /// 指定的边长(正方型)0027         /// 质量(范围0-100)0028         public static void CutForSquare(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int side, int quality)0029         {0030             //创建目录0031             string dir = Path.GetDirectoryName(fileSaveUrl);0032             if (!Directory.Exists(dir))0033                 Directory.CreateDirectory(dir);0034             //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)0035             System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);0036             //原图宽高均小于模版,不作处理,直接保存0037             if (initImage.Width <= side && initImage.Height <= side)0038             {0039                 initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0040             }0041             else0042             {0043                 //原始图片的宽、高0044                 int initWidth = initImage.Width;0045                 int initHeight = initImage.Height;0046                 //非正方型先裁剪为正方型0047                 if (initWidth != initHeight)0048                 {0049                     //截图对象0050                     System.Drawing.Image pickedImage = null;0051                     System.Drawing.Graphics pickedG = null;0052                     //宽大于高的横图0053                     if (initWidth > initHeight)0054                     {0055                         //对象实例化0056                         pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);0057                         pickedG = System.Drawing.Graphics.FromImage(pickedImage);0058                         //设置质量0059                         pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0060                         pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0061                         //定位0062                         Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);0063                         Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);0064                         //画图0065                         pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0066                         //重置宽0067                         initWidth = initHeight;0068                     }0069                     //高大于宽的竖图0070                     else0071                     {0072                         //对象实例化0073                         pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);0074                         pickedG = System.Drawing.Graphics.FromImage(pickedImage);0075                         //设置质量0076                         pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0077                         pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0078                         //定位0079                         Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);0080                         Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);0081                         //画图0082                         pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0083                         //重置高0084                         initHeight = initWidth;0085                     }0086                     //将截图对象赋给原图0087                     initImage = (System.Drawing.Image)pickedImage.Clone();0088                     //释放截图资源0089                     pickedG.Dispose();0090                     pickedImage.Dispose();0091                 }0092                 //缩略图对象0093                 System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);0094                 System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);0095                 //设置质量0096                 resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0097                 resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0098                 //用指定背景色清空画布0099                 resultG.Clear(Color.White);0100                 //绘制缩略图0101                 resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);0102                 //关键质量控制0103                 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff0104                 ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();0105                 ImageCodecInfo ici = null;0106                 foreach (ImageCodecInfo i in icis)0107                 {0108                     if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")0109                     {0110                         ici = i;0111                     }0112                 }0113                 EncoderParameters ep = new EncoderParameters(1);0114                 ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);0115                 //保存缩略图0116                 resultImage.Save(fileSaveUrl, ici, ep);0117                 //释放关键质量控制所用资源0118                 ep.Dispose();0119                 //释放缩略图资源0120                 resultG.Dispose();0121                 resultImage.Dispose();0122                 //释放原始图片资源0123                 initImage.Dispose();0124             }0125         }0126         /// 0127         /// 正方型裁剪0128         /// 以图片中心为轴心,截取正方型,然后等比缩放0129         /// 用于头像处理0130         /// 0131         /// 吴剑 2010-11-230132         /// 原图HttpPostedFile对象0133         /// 缩略图存放地址0134         /// 指定的边长(正方型)0135         /// 质量(范围0-100)0136         public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)0137         {0138             //创建目录0139             string dir = Path.GetDirectoryName(fileSaveUrl);0140             if (!Directory.Exists(dir))0141                 Directory.CreateDirectory(dir);0142             //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)0143             System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);0144             //原图宽高均小于模版,不作处理,直接保存0145             if (initImage.Width <= side && initImage.Height <= side)0146             {0147                 initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0148             }0149             else0150             {0151                 //原始图片的宽、高0152                 int initWidth = initImage.Width;0153                 int initHeight = initImage.Height;0154                 //非正方型先裁剪为正方型0155                 if (initWidth != initHeight)0156                 {0157                     //截图对象0158                     System.Drawing.Image pickedImage = null;0159                     System.Drawing.Graphics pickedG = null;0160                     //宽大于高的横图0161                     if (initWidth > initHeight)0162                     {0163                         //对象实例化0164                         pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);0165                         pickedG = System.Drawing.Graphics.FromImage(pickedImage);0166                         //设置质量0167                         pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0168                         pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0169                         //定位0170                         Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);0171                         Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);0172                         //画图0173                         pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0174                         //重置宽0175                         initWidth = initHeight;0176                     }0177                     //高大于宽的竖图0178                     else0179                     {0180                         //对象实例化0181                         pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);0182                         pickedG = System.Drawing.Graphics.FromImage(pickedImage);0183                         //设置质量0184                         pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0185                         pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0186                         //定位0187                         Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);0188                         Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);0189                         //画图0190                         pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0191                         //重置高0192                         initHeight = initWidth;0193                     }0194                     //将截图对象赋给原图0195                     initImage = (System.Drawing.Image)pickedImage.Clone();0196                     //释放截图资源0197                     pickedG.Dispose();0198                     pickedImage.Dispose();0199                 }0200                 //缩略图对象0201                 System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);0202                 System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);0203                 //设置质量0204                 resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0205                 resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0206                 //用指定背景色清空画布0207                 resultG.Clear(Color.White);0208                 //绘制缩略图0209                 resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);0210                 //关键质量控制0211                 //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff0212                 ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();0213                 ImageCodecInfo ici = null;0214                 foreach (ImageCodecInfo i in icis)0215                 {0216                     if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")0217                     {0218                         ici = i;0219                     }0220                 }0221                 EncoderParameters ep = new EncoderParameters(1);0222                 ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);0223                 //保存缩略图0224                 resultImage.Save(fileSaveUrl, ici, ep);0225                 //释放关键质量控制所用资源0226                 ep.Dispose();0227                 //释放缩略图资源0228                 resultG.Dispose();0229                 resultImage.Dispose();0230                 //释放原始图片资源0231                 initImage.Dispose();0232             }0233         }0234         #endregion0235         #region 固定模版裁剪并缩放0236         /// 0237         /// 指定长宽裁剪0238         /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸0239         /// 0240         /// 吴剑 2010-11-150241         /// 原图HttpPostedFile对象0242         /// 保存路径0243         /// 最大宽(单位:px)0244         /// 最大高(单位:px)0245         /// 质量(范围0-100)0246         public static void CutForCustom(System.Web.HttpPostedFile postedFile, string fileSaveUrl, int maxWidth, int maxHeight, int quality)0247         {0248             //从文件获取原始图片,并使用流中嵌入的颜色管理信息0249             System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);0250             //原图宽高均小于模版,不作处理,直接保存0251             if (initImage.Width <= maxWidth && initImage.Height <= maxHeight)0252             {0253                 initImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0254             }0255             else0256             {0257                 //模版的宽高比例0258                 double templateRate = (double)maxWidth / maxHeight;0259                 //原图片的宽高比例0260                 double initRate = (double)initImage.Width / initImage.Height;0261                 //原图与模版比例相等,直接缩放0262                 if (templateRate == initRate)0263                 {0264                     //按模版大小生成最终图片0265                     System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);0266                     System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);0267                     templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;0268                     templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0269                     templateG.Clear(Color.White);0270                     templateG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, maxWidth, maxHeight), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);0271                     templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0272                 }0273                 //原图与模版比例不等,裁剪后缩放0274                 else0275                 {0276                     //裁剪对象0277                     System.Drawing.Image pickedImage = null;0278                     System.Drawing.Graphics pickedG = null;0279                     //定位0280                     Rectangle fromR = new Rectangle(0, 0, 0, 0);//原图裁剪定位0281                     Rectangle toR = new Rectangle(0, 0, 0, 0);//目标定位0282                     //宽为标准进行裁剪0283                     if (templateRate > initRate)0284                     {0285                         //裁剪对象实例化0286                         pickedImage = new System.Drawing.Bitmap(initImage.Width, (int)Math.Floor(initImage.Width / templateRate));0287                         pickedG = System.Drawing.Graphics.FromImage(pickedImage);0288                         //裁剪源定位0289                         fromR.X = 0;0290                         fromR.Y = (int)Math.Floor((initImage.Height - initImage.Width / templateRate) / 2);0291                         fromR.Width = initImage.Width;0292                         fromR.Height = (int)Math.Floor(initImage.Width / templateRate);0293                         //裁剪目标定位0294                         toR.X = 0;0295                         toR.Y = 0;0296                         toR.Width = initImage.Width;0297                         toR.Height = (int)Math.Floor(initImage.Width / templateRate);0298                     }0299                     //高为标准进行裁剪0300                     else0301                     {0302                         pickedImage = new System.Drawing.Bitmap((int)Math.Floor(initImage.Height * templateRate), initImage.Height);0303                         pickedG = System.Drawing.Graphics.FromImage(pickedImage);0304                         fromR.X = (int)Math.Floor((initImage.Width - initImage.Height * templateRate) / 2);0305                         fromR.Y = 0;0306                         fromR.Width = (int)Math.Floor(initImage.Height * templateRate);0307                         fromR.Height = initImage.Height;0308                         toR.X = 0;0309                         toR.Y = 0;0310                         toR.Width = (int)Math.Floor(initImage.Height * templateRate);0311                         toR.Height = initImage.Height;0312                     }0313                     //设置质量0314                     pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0315                     pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0316                     //裁剪0317                     pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);0318                     //按模版大小生成最终图片0319                     System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);0320                     System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);0321                     templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;0322                     templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0323                     templateG.Clear(Color.White);0324                     templateG.DrawImage(pickedImage, new System.Drawing.Rectangle(0, 0, maxWidth, maxHeight), new System.Drawing.Rectangle(0, 0, pickedImage.Width, pickedImage.Height), System.Drawing.GraphicsUnit.Pixel);0325                     //关键质量控制0326                     //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff0327                     ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();0328                     ImageCodecInfo ici = null;0329                     foreach (ImageCodecInfo i in icis)0330                     {0331                         if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")0332                         {0333                             ici = i;0334                         }0335                     }0336                     EncoderParameters ep = new EncoderParameters(1);0337                     ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);0338                     //保存缩略图0339                     templateImage.Save(fileSaveUrl, ici, ep);0340                     //templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);0341                     //释放资源0342                     templateG.Dispose();0343                     templateImage.Dispose();0344                     pickedG.Dispose();0345                     pickedImage.Dispose();0346                 }0347             }0348             //释放资源0349             initImage.Dispose();0350         }0351         #endregion0352         #region 等比缩放0353         /// 0354         /// 图片等比缩放0355         /// 0356         /// 吴剑 2011-01-210357         /// 原图HttpPostedFile对象0358         /// 缩略图存放地址0359         /// 指定的最大宽度0360         /// 指定的最大高度0361         /// 水印文字(为""表示不使用水印)0362         /// 水印图片路径(为""表示不使用水印)0363         public static void ZoomAuto(System.Web.HttpPostedFile postedFile, string savePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)0364         {0365             //创建目录0366             string dir = Path.GetDirectoryName(savePath);0367             if (!Directory.Exists(dir))0368                 Directory.CreateDirectory(dir);0369             //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)0370             System.Drawing.Image initImage = System.Drawing.Image.FromStream(postedFile.InputStream, true);0371             //原图宽高均小于模版,不作处理,直接保存0372             if (initImage.Width <= targetWidth && initImage.Height <= targetHeight)0373             {0374                 //文字水印0375                 if (watermarkText != "")0376                 {0377                     using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(initImage))0378                     {0379                         System.Drawing.Font fontWater = new Font("黑体", 10);0380                         System.Drawing.Brush brushWater = new SolidBrush(Color.White);0381                         gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);0382                         gWater.Dispose();0383                     }0384                 }0385                 //透明图片水印0386                 if (watermarkImage != "")0387                 {0388                     if (File.Exists(watermarkImage))0389                     {0390                         //获取水印图片0391                         using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))0392                         {0393                             //水印绘制条件:原始图片宽高均大于或等于水印图片0394                             if (initImage.Width >= wrImage.Width && initImage.Height >= wrImage.Height)0395                             {0396                                 Graphics gWater = Graphics.FromImage(initImage);0397                                 //透明属性0398                                 ImageAttributes imgAttributes = new ImageAttributes();0399                                 ColorMap colorMap = new ColorMap();0400                                 colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);0401                                 colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);0402                                 ColorMap[] remapTable = { colorMap };0403                                 imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);0404                                 float[][] colorMatrixElements = { 0405                                         new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},0406                                         new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},0407                                         new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},0408                                         new float[] {0.0f,  0.0f,  0.0f,  0.5f, 0.0f},//透明度:0.50409                                         new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}0410                                         };0411                                 ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);0412                                 imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);0413                                 gWater.DrawImage(wrImage, new Rectangle(initImage.Width - wrImage.Width, initImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes);0414                                 gWater.Dispose();0415                             }0416                             wrImage.Dispose();0417                         }0418                     }0419                 }0420                 //保存0421                 initImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);0422             }0423             else0424             {0425                 //缩略图宽、高计算0426                 double newWidth = initImage.Width;0427                 double newHeight = initImage.Height;0428                 //宽大于高或宽等于高(横图或正方)0429                 if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)0430                 {0431                     //如果宽大于模版0432                     if (initImage.Width > targetWidth)0433                     {0434                         //宽按模版,高按比例缩放0435                         newWidth = targetWidth;0436                         newHeight = initImage.Height * (targetWidth / initImage.Width);0437                     }0438                 }0439                 //高大于宽(竖图)0440                 else0441                 {0442                     //如果高大于模版0443                     if (initImage.Height > targetHeight)0444                     {0445                         //高按模版,宽按比例缩放0446                         newHeight = targetHeight;0447                         newWidth = initImage.Width * (targetHeight / initImage.Height);0448                     }0449                 }0450                 //生成新图0451                 //新建一个bmp图片0452                 System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);0453                 //新建一个画板0454                 System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);0455                 //设置质量0456                 newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;0457                 newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;0458                 //置背景色0459                 newG.Clear(Color.White);0460                 //画图0461                 newG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, newImage.Width, newImage.Height), new System.Drawing.Rectangle(0, 0, initImage.Width, initImage.Height), System.Drawing.GraphicsUnit.Pixel);0462                 //文字水印0463                 if (watermarkText != "")0464                 {0465                     using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(newImage))0466                     {0467                         System.Drawing.Font fontWater = new Font("宋体", 10);0468                         System.Drawing.Brush brushWater = new SolidBrush(Color.White);0469                         gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);0470                         gWater.Dispose();0471                     }0472                 }0473                 //透明图片水印0474                 if (watermarkImage != "")0475                 {0476                     if (File.Exists(watermarkImage))0477                     {0478                         //获取水印图片0479                         using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))0480                         {0481                             //水印绘制条件:原始图片宽高均大于或等于水印图片0482                             if (newImage.Width >= wrImage.Width && newImage.Height >= wrImage.Height)0483                             {0484                                 Graphics gWater = Graphics.FromImage(newImage);0485                                 //透明属性0486                                 ImageAttributes imgAttributes = new ImageAttributes();0487                                 ColorMap colorMap = new ColorMap();0488                                 colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);0489                                 colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);0490                                 ColorMap[] remapTable = { colorMap };0491                                 imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);0492                                 float[][] colorMatrixElements = { 0493                                         new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},0494                                         new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},0495                                         new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},0496                                         new float[] {0.0f,  0.0f,  0.0f,  0.5f, 0.0f},//透明度:0.50497                                         new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}0498                                         };0499                                 ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);0500                                 imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);0501                                 gWater.DrawImage(wrImage, new Rectangle(newImage.Width - wrImage.Width, newImage.Height - wrImage.Height, wrImage.Width, wrImage.Height), 0, 0, wrImage.Width, wrImage.Height, GraphicsUnit.Pixel, imgAttributes);0502                                 gWater.Dispose();0503                             }0504                             wrImage.Dispose();0505                         }0506                     }0507                 }0508                 //保存缩略图0509                 newImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);0510                 //释放资源0511                 newG.Dispose();0512                 newImage.Dispose();0513                 initImage.Dispose();0514             }0515         }0516         #endregion0517         #region 其它0518         /// 0519         /// 判断文件类型是否为WEB格式图片0520         /// (注:JPG,GIF,BMP,PNG)0521         /// 0522         /// HttpPostedFile.ContentType0523         /// 0524         public static bool IsWebImage(string contentType)0525         {0526             if (contentType == "image/pjpeg" || contentType == "image/jpeg" || contentType == "image/gif" || contentType == "image/bmp" || contentType == "image/png")0527             {0528                 return true;0529             }0530             else0531             {0532                 return false;0533             }0534         }0535         #endregion0536     }//end class0537 }
原创粉丝点击