图像裁切

  1 public class Cutimg
  2     {
  3         /// <summary>
  4         /// 
  5         /// </summary>
  6         /// <param name="pPath">原图地址</param>
  7         /// <param name="filePath">存储图片地址</param>
  8         /// <param name="pPartStartPointX">截取目标-x</param>
  9         /// <param name="pPartStartPointY">截取目标-y</param>
 10         /// <param name="pPartWidth">截取目标-宽度</param>
 11         /// <param name="pPartHeight">截取目标-高度</param>
 12         /// <param name="pOrigStartPointX">缩放图-x:0</param>
 13         /// <param name="pOrigStartPointY">缩放图-y:0</param>
 14         /// <param name="imageWidth">缩放图-宽度</param>
 15         /// <param name="imageHeight">缩放图-高度</param>
 16         /// <returns></returns>
 17         public static bool SaveCutPic(string pPath, string filePath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY, int imageWidth, int imageHeight)
 18         {
 19             using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
 20             {
 21                 try
 22                 {
 23                     if (originalImg.Width == imageWidth && originalImg.Height == imageHeight)
 24                     {
 25                         return SaveCutPic(pPath, filePath, pPartStartPointX, pPartStartPointY, pPartWidth, pPartHeight,
 26                                 pOrigStartPointX, pOrigStartPointY);
 27 
 28                     }
 29                     
 30                     Bitmap thumimg = MakeThumbnail(originalImg, imageWidth, imageHeight);
 31 
 32                     Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
 33                     
 34                     Graphics graphics = Graphics.FromImage(partImg);
 35                     Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
 36                     Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
 37 
 38                     ///文字水印  
 39                     Graphics G = Graphics.FromImage(partImg);
 40                     //Font f = new Font("Lucida Grande", 6);
 41                     //Brush b = new SolidBrush(Color.Gray);
 42                     G.Clear(Color.White);
 43                     // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。 
 44                     G.InterpolationMode = InterpolationMode.HighQualityBicubic;
 45                     // 指定高质量、低速度呈现。 
 46                     G.SmoothingMode = SmoothingMode.HighQuality;
 47 
 48                     graphics.DrawImage(thumimg, destRect, origRect, GraphicsUnit.Pixel);
 49                     //G.DrawString("Xuanye", f, b, 0, 0);
 50                     G.Dispose();
 51 
 52                     originalImg.Dispose();
 53                     if (File.Exists(filePath))
 54                     {
 55                         File.SetAttributes(filePath, FileAttributes.Normal);
 56                         File.Delete(filePath);
 57                     }
 58                     if (!Directory.Exists(Path.GetDirectoryName(filePath)))
 59                     {
 60                         Directory.CreateDirectory(Path.GetDirectoryName(filePath));
 61                         
 62                     }
 63                     partImg.Save(filePath, ImageFormat.Jpeg);
 64 
 65                     partImg.Dispose();
 66                     thumimg.Dispose();
 67                 }
 68                 catch
 69                 {
 70                     return false;
 71                 }
 72                 return true;
 73             }
 74         }
 75 
 76         public static Bitmap MakeThumbnail(System.Drawing.Image fromImg, int width, int height)
 77         {
 78             Bitmap bmp = new Bitmap(width, height);
 79             int ow = fromImg.Width;
 80             int oh = fromImg.Height;
 81 
 82             //新建一个画板
 83             Graphics g = Graphics.FromImage(bmp);
 84 
 85             //设置高质量插值法
 86             g.InterpolationMode = InterpolationMode.High;
 87             //设置高质量,低速度呈现平滑程度
 88             g.SmoothingMode = SmoothingMode.Default;
 89             //清空画布并以透明背景色填充
 90             g.Clear(Color.White);
 91 
 92             g.DrawImage(fromImg, new Rectangle(0, 0, width, height),
 93                 new Rectangle(0, 0, ow, oh),
 94                 GraphicsUnit.Pixel);
 95 
 96             return bmp;
 97 
 98         }
 99 
100         public static bool SaveCutPic(string pPath, string filePath, int pPartStartPointX, int pPartStartPointY, int pPartWidth, int pPartHeight, int pOrigStartPointX, int pOrigStartPointY)
101         {
102             using (System.Drawing.Image originalImg = System.Drawing.Image.FromFile(pPath))
103             {
104                 try
105                 {
106                     Bitmap partImg = new Bitmap(pPartWidth, pPartHeight);
107                     Graphics graphics = Graphics.FromImage(partImg);
108                     Rectangle destRect = new Rectangle(new Point(pPartStartPointX, pPartStartPointY), new Size(pPartWidth, pPartHeight));//目标位置
109                     Rectangle origRect = new Rectangle(new Point(pOrigStartPointX, pOrigStartPointY), new Size(pPartWidth, pPartHeight));//原图位置(默认从原图中截取的图片大小等于目标图片的大小)
110 
111                     ///注释 文字水印  
112                     Graphics G = Graphics.FromImage(partImg);
113                     //Font f = new Font("Lucida Grande", 6);
114                     //Brush b = new SolidBrush(Color.Gray);
115                     G.Clear(Color.White);
116                     // 指定高质量的双三次插值法。执行预筛选以确保高质量的收缩。此模式可产生质量最高的转换图像。 
117                     G.InterpolationMode = InterpolationMode.HighQualityBicubic;
118                     // 指定高质量、低速度呈现。 
119                     G.SmoothingMode = SmoothingMode.HighQuality;
120 
121                     graphics.DrawImage(originalImg, destRect, origRect, GraphicsUnit.Pixel);
122                     //G.DrawString("Xuanye", f, b, 0, 0);
123                     G.Dispose();
124 
125                     originalImg.Dispose();
126                     if (File.Exists(filePath))
127                     {
128                         File.SetAttributes(filePath, FileAttributes.Normal);
129                         File.Delete(filePath);
130                     }
131                     partImg.Save(filePath, ImageFormat.Jpeg);
132                     partImg.Dispose();
133                 }
134                 catch
135                 {
136                     return false;
137                 }
138             }
139             return true;
140         }
141     }
原文地址:https://www.cnblogs.com/linzhao126/p/3492817.html