• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C#图片处理示例(裁剪,缩放,清晰度,水印)

c# 搞代码 4年前 (2022-01-09) 25次浏览 已收录 0个评论
using System;  using System.Collections.Generic;  using System.Text;  using System.IO;  using System.Drawing;  using System.Drawing.Drawing2D;  using System.Drawing.Imaging;     namespace WuJian.Common  {        public class Image      {          #region 正方型裁剪并缩放             /// <summary>          /// 正方型裁剪          /// 以图片中心为轴心,截取正方型,然后等比缩放          /// 用于头像处理          /// </summary>          /// 吴剑 2012-08-08          /// 原图Stream对象          /// 缩略图存放地址          /// 指定的边长(正方型)          /// 质量(范围0-100)          public static void CutForSquare(System.IO.Stream fromFile, string fileSaveUrl, int side, int quality)          {              //创建目录              string dir = Path.GetDirectoryName(fileSaveUrl);              if (!Directory.Exists(dir))                  Directory.CreateDirectory(dir);                 //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)              System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);                 //原图宽高均小于模版,不作处理,直接保存              if (initImage.Width <= side && initImage.Height  initHeight)                      {                          //对象实例化                          pickedImage = new System.Drawing.Bitmap(initHeight, initHeight);                          pickedG = System.Drawing.Graphics.FromImage(pickedImage);                          //设置质量                          pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;                          pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                          //定位                          Rectangle fromR = new Rectangle((initWidth - initHeight) / 2, 0, initHeight, initHeight);                          Rectangle toR = new Rectangle(0, 0, initHeight, initHeight);                          //画图                          pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);                          //重置宽                          initWidth = initHeight;                      }                      //高大于宽的竖图                      else                     {                          //对象实例化                          pickedImage = new System.Drawing.Bitmap(initWidth, initWidth);                          pickedG = System.Drawing.Graphics.FromImage(pickedImage);                          //设置质量                          pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;                          pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                          //定位                          Rectangle fromR = new Rectangle(0, (initHeight - initWidth) / 2, initWidth, initWidth);                          Rectangle toR = new Rectangle(0, 0, initWidth, initWidth);                          //画图                          pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);                          //重置高                          initHeight = initWidth;                      }                         //将截图对象赋给原图                      initImage = (System.Drawing.Image)pickedImage.Clone();                      //释放截图资源                      pickedG.Dispose();                      pickedImage.Dispose();                  }                     //缩略图对象                  System.Drawing.Image resultImage = new System.Drawing.Bitmap(side, side);                  System.Drawing.Graphics resultG = System.Drawing.Graphics.FromImage(resultImage);                  //设置质量                  resultG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;                  resultG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                  //用指定背景色清空画布                  resultG.Clear(Color.White);                  //绘制缩略图                  resultG.DrawImage(initImage, new System.Drawing.Rectangle(0, 0, side, side), new System.Drawing.Rectangle(0, 0, initWidth, initHeight), System.Drawing.GraphicsUnit.Pixel);                     //关键质量控制                  //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff                  ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();                  ImageCodecInfo ici = null;                  foreach (ImageCodecInfo i in icis)                  {                      if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")                      {                          ici = i;                      }                  }                  EncoderParameters ep = new EncoderParameters(1);                  ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);                     //保存缩略图                  resultImage.Save(fileSaveUrl, ici, ep);                     //释放关键质量控制所用资源                  ep.Dispose();                     //释放缩略图资源                  resultG.Dispose();                  resultImage.Dispose();                     //释放原始图片资源                  initImage.Dispose();              }          }            #endregion            #region 自定义裁剪并缩放             /// <summary>          /// 指定长宽裁剪          /// 按模版比例最大范围的裁剪图片并缩放至模版尺寸          /// </summary>          /// 吴剑 2012-08-08          /// 原图Stream对象          /// 保存路径          /// 最大宽(单位:px)          /// 最大高(单位:px)          /// 质量(范围0-100)          public static void CutForCustom(System.IO.Stream fromFile, string fileSaveUrl, int maxWidth, int maxHeight, int quality)          {              //从文件获取原始图片,并使用流中嵌入的颜色管理信息              System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);                 //原图宽高均小于模版,不作处理,直接保存              if (initImage.Width <= maxWidth && initImage.Height  initRate)                      {                          //裁剪对象实例化                          pickedImage = new System.Drawing.Bitmap(initImage.Width, (int)System.Math.Floor(initImage.Width / templateRate));                          pickedG = System.Drawing.Graphics.FromImage(pickedImage);                             //裁剪源定位                          fromR.X = 0;                          fromR.Y = (int)System.Math.Floor((initImage.Height - initImage.Width / templateRate) / 2);                          fromR.Width = initImage.Width;                          fromR.Height = (int)System.Math.Floor(initImage.Width / templateRate);                             //裁剪目标定位                          toR.X = 0;                          toR.Y = 0;                          toR.Width = initImage.Width;                          toR.Height = (int)System.Math.Floor(initImage.Width / templateRate);                      }                      //高为标准进行裁剪                      else                     {                          pickedImage = new System.Drawing.Bitmap((int)System.Math.Floor(initImage.Height * templateRate), initImage.Height);                          pickedG = System.Drawing.Graphics.FromImage(pickedImage);                             fromR.X = (int)System.Math.Floor((initImage.Width - initImage.Height * templateRate) / 2);                          fromR.Y = 0;                          fromR.Width = (int)System.Math.Floor(initImage.Height * templateRate);                          fromR.Height = initImage.Height;                             toR.X = 0;                          toR.Y = 0;                          toR.Width = (int)System.Math.Floor(initImage.Height * templateRate);                          toR.Height = initImage.Height;                      }                         //设置质量                      pickedG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;                      pickedG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                         //裁剪                      pickedG.DrawImage(initImage, toR, fromR, System.Drawing.GraphicsUnit.Pixel);                         //按模版大小生成最终图片                      System.Drawing.Image templateImage = new System.Drawing.Bitmap(maxWidth, maxHeight);                      System.Drawing.Graphics templateG = System.Drawing.Graphics.FromImage(templateImage);                      templateG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.High;                      templateG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                      templateG.Clear(Color.White);                      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);                         //关键质量控制                      //获取系统编码类型数组,包含了jpeg,bmp,png,gif,tiff                      ImageCodecInfo[] icis = ImageCodecInfo.GetImageEncoders();                      ImageCodecInfo ici = null;                      foreach (ImageCodecInfo i in icis)                      {                          if (i.MimeType == "image/jpeg" || i.MimeType == "image/bmp" || i.MimeType == "image/png" || i.MimeType == "image/gif")                          {                              ici = i;                          }                      }                      EncoderParameters ep = new EncoderParameters(1);                      ep.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)quality);                         //保存缩略图                      templateImage.Save(fileSaveUrl, ici, ep);                      //templateImage.Save(fileSaveUrl, System.Drawing.Imaging.ImageFormat.Jpeg);                         //释放资源                      templateG.Dispose();                      templateImage.Dispose();                         pickedG.Dispose();                      pickedImage.Dispose();                  }              }                 //释放资源              initImage.Dispose();          }          #endregion            #region 等比缩放             /// <summary>          /// 图片等比缩放          /// </summary>          /// 吴剑 2012-08-08          /// 原图Stream对象          /// 缩略图存放地址          /// 指定的最大宽度          /// 指定的最大高度          /// 水印文字(为""表示不使用水印)          /// 水印图片路径(为""表示不使用水印)          public static void ZoomAuto(System.IO.Stream fromFile, string savePath, System.Double targetWidth, System.Double targetHeight, string watermarkText, string watermarkImage)          {              //创建目录              string dir = Path.GetDirectoryName(savePath);              if (!Directory.Exists(dir))                  Directory.CreateDirectory(dir);                 //原始图片(获取原始图片创建对象,并使用流中嵌入的颜色管理信息)              System.Drawing.Image initImage = System.Drawing.Image.FromStream(fromFile, true);                 //原图宽高均小于模版,不作处理,直接保存              if (initImage.Width <= targetWidth && initImage.Height = wrImage.Width && initImage.Height >= wrImage.Height)                              {                                  Graphics gWater = Graphics.FromImage(initImage);                                     //透明属性                                  ImageAttributes imgAttributes = new ImageAttributes();                                  ColorMap colorMap = new ColorMap();                                  colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);                                  colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);                                  ColorMap[] remapTable = { colorMap };                                  imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);                                     float[][] colorMatrixElements = {                                      new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},                                     new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},                                     new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},                                     new float[] {0.0f,  0.0f,  0.0f,  0.5f, 0.0f},//透明度:0.5                                     new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}                                  };                                     ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);                                  imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);                                  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);                                     gWater.Dispose();                              }                              wrImage.Dispose();                          }                      }                  }                     //保存                  initImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);              }              else             {                  //缩略图宽、高计算                  double newWidth = initImage.Width;                  double newHeight = initImage.Height;                     //宽大于高或宽等于高(横图或正方)                  if (initImage.Width > initImage.Height || initImage.Width == initImage.Height)                  {                      //如果宽大于模版                      if (initImage.Width > targetWidth)                      {                          //宽按模版,高按比例缩放                          newWidth = targetWidth;                          newHeight = initImage.Height * (targetWidth / initImage.Width);                      }                  }                  //高大于宽(竖图)                  else                 {                      //如果高大于模版                      if (initImage.Height > targetHeight)                      {                          //高按模版,宽按比例缩放                          newHeight = targetHeight;                          newWidth = initImage.Width * (targetHeight / initImage.Height);                      }                  }                     //生成新图                  //新建一个bmp图片                  System.Drawing.Image newImage = new System.Drawing.Bitmap((int)newWidth, (int)newHeight);                  //新建一个画板                  System.Drawing.Graphics newG = System.Drawing.Graphics.FromImage(newImage);                     //设置质量                  newG.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;                  newG.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;                     //置背景色                  newG.Clear(Color.White);                  //画图                  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);                     //文字水印                  if (watermarkText != "")                  {                      using (System.Drawing.Graphics gWater = System.Drawing.Graphics.FromImage(newImage))                      {                          System.Drawing.Font fontWater = new Font("宋体", 10);                          System.Drawing.Brush brushWater = new SolidBrush(Color.White);                          gWater.DrawString(watermarkText, fontWater, brushWater, 10, 10);                          gWater.Dispose();                      }                  }                     //透明图片水印                  if (watermarkImage != "")                  {                      if (File.Exists(watermarkImage))                      {                          //获取水印图片                          using (System.Drawing.Image wrImage = System.Drawing.Image.FromFile(watermarkImage))                          {                              //水印绘制条件:原始图片宽高均大于或等于水印图片                              if (newImage.Width >= wrImage.Width && newImage.Height >= wrImage.Height)                              {                                  Graphics gWater = Graphics.FromImage(newImage);                                     //透明属性                                  ImageAttributes imgAttributes = new ImageAttributes();                                  ColorMap colorMap = new ColorMap();                                  colorMap.OldColor = Color.FromArgb(255, 0, 255, 0);                                  colorMap.NewColor = Color.FromArgb(0, 0, 0, 0);                                  ColorMap[] remapTable = { colorMap };                                  imgAttributes.SetRemapTable(remapTable, ColorAdjustType.Bitmap);                 <span style="color:transparent">本文来源gaodai#ma#com搞*!代#%^码$网!</span>                    float[][] colorMatrixElements = {                                      new float[] {1.0f,  0.0f,  0.0f,  0.0f, 0.0f},                                     new float[] {0.0f,  1.0f,  0.0f,  0.0f, 0.0f},                                     new float[] {0.0f,  0.0f,  1.0f,  0.0f, 0.0f},                                     new float[] {0.0f,  0.0f,  0.0f,  0.5f, 0.0f},//透明度:0.5                                     new float[] {0.0f,  0.0f,  0.0f,  0.0f, 1.0f}                                  };                                     ColorMatrix wmColorMatrix = new ColorMatrix(colorMatrixElements);                                  imgAttributes.SetColorMatrix(wmColorMatrix, ColorMatrixFlag.Default, ColorAdjustType.Bitmap);                                  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);                                  gWater.Dispose();                              }                              wrImage.Dispose();                          }                      }                  }                     //保存缩略图                  newImage.Save(savePath, System.Drawing.Imaging.ImageFormat.Jpeg);                     //释放资源                  newG.Dispose();                  newImage.Dispose();                  initImage.Dispose();              }          }            #endregion            #region 其它             /// <summary>          /// 判断文件类型是否为WEB格式图片          /// (注:JPG,GIF,BMP,PNG)          /// </summary>          /// HttpPostedFile.ContentType          ///           public static bool IsWebImage(string contentType)          {              if (contentType == "image/pjpeg" || contentType == "image/jpeg" || contentType == "image/gif" || contentType == "image/bmp" || contentType == "image/png")              {                  return true;              }              else             {                  return false;              }          }            #endregion         }//end class  }

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C#图片处理示例(裁剪,缩放,清晰度,水印)
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址