码迷,mamicode.com
首页 > 其他好文 > 详细

裁剪图片

时间:2015-01-12 10:50:54      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

技术分享
  1 using System;
  2 using System.Drawing;
  3 using System.Drawing.Drawing2D;
  4 using System.IO;
  5 
  6 namespace ClassLibrary
  7 {
  8     /// <summary>
  9     /// 图片处理
 10     /// </summary>
 11     public static class Img
 12     {
 13         #region 图片裁剪
 14         #region 通过文件路径图片
 15         /// <summary>
 16         /// 通过文件路径裁剪图片
 17         /// </summary>
 18         /// <param name="imgFile">文件路径</param>
 19         /// <param name="startX">图片左上角X坐标</param>
 20         /// <param name="startY">图片左上角Y坐标</param>
 21         /// <param name="width">截取宽度</param>
 22         /// <param name="height">截取高度</param>
 23         /// <param name="widthS">图片显示宽度</param>
 24         /// <param name="heightS">图片显示高度</param>
 25         /// <returns></returns>
 26         public static Image ImgCutFromFile(string imgFile, int startX, int startY, int width, int height, int widthS = 0, int heightS=0)
 27         {
 28             Image img = Image.FromFile(imgFile);
 29             if (widthS > 0 && heightS > 0)
 30             {
 31                 GetXYWH(ref startX, ref startY, ref width, ref height, widthS, heightS, img);
 32             }
 33             return ImgCut(img, startX, startY, width, height);
 34         }
 35         #endregion
 36 
 37         #region 通过流图片
 38         /// <summary>
 39         /// 通过流图片
 40         /// </summary>
 41         /// <param name="stream"></param>
 42         /// <param name="startX">图片左上角X坐标</param>
 43         /// <param name="startY">图片左上角Y坐标</param>
 44         /// <param name="width">截取宽度</param>
 45         /// <param name="height">截取高度</param>
 46         /// <param name="widthS">图片显示宽度</param>
 47         /// <param name="heightS">图片显示高度</param>
 48         /// <returns></returns>
 49         public static Image ImgCutFromStream(Stream stream, int startX, int startY, int width, int height, int widthS = 0, int heightS = 0)
 50         {
 51             Image img = Image.FromStream(stream);
 52             if (widthS > 0 && heightS > 0)
 53             {
 54                 GetXYWH(ref startX, ref startY, ref width, ref height, widthS, heightS, img);
 55             }
 56             return ImgCut(img, startX, startY, width, height);
 57         }
 58         #endregion
 59 
 60         #region 获取实际XYWH
 61         /// <summary>
 62         /// 获取实际XYWH
 63         /// </summary>
 64         /// <param name="startX">图片左上角X坐标</param>
 65         /// <param name="startY">图片左上角Y坐标</param>
 66         /// <param name="width">截取宽度</param>
 67         /// <param name="height">截取高度</param>
 68         /// <param name="widthS">图片显示宽度</param>
 69         /// <param name="heightS">图片显示高度</param>
 70         /// <param name="img"></param>
 71         private static void GetXYWH(ref int startX, ref int startY, ref int width, ref int height, int widthS, int heightS, Image img)
 72         {
 73             /*img.Width / widthS 是实际图片大小与页面显示图片大小比值*/
 74             startX = Convert.ToInt32(startX * img.Width / widthS);
 75             startY = Convert.ToInt32(startY * img.Height / heightS);
 76             width = Convert.ToInt32(width * img.Width / widthS);
 77             height = Convert.ToInt32(height * img.Height / heightS);
 78         }
 79         #endregion
 80 
 81         #region 执行剪裁
 82         /// <summary>
 83         /// 图片裁剪
 84         /// </summary>
 85         /// <param name="image">图片</param>
 86         /// <param name="startX">图片左上角X坐标</param>
 87         /// <param name="startY">图片左上角Y坐标</param>
 88         /// <param name="width">截取宽度</param>
 89         /// <param name="height">截取高度</param>
 90         /// <returns></returns>
 91         public static Image ImgCut(Image image, int startX, int startY, int width, int height)
 92         {
 93             Image img = image;//获取原始图片
 94             Image newImg = new Bitmap(width, height);//裁剪后的图片
 95             Graphics g = Graphics.FromImage(newImg);
 96             /*设置质量*/
 97             g.InterpolationMode = InterpolationMode.HighQualityBicubic;
 98             g.SmoothingMode = SmoothingMode.HighQuality;
 99             /*图片源位置,图片源大小*/
100             Rectangle fromR = new Rectangle(startX, startY, width, height);
101             /*绘图位置绘图大小*/
102             Rectangle toR = new Rectangle(0, 0, width, height);
103             /*画图*/
104             g.DrawImage(img, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
105             /*释放截图资源*/
106             g.Dispose();
107             return newImg;
108             //newImg.Save(Server.MapPath(""));
109             //newImg.Dispose();
110         }
111         #endregion
112         #endregion
113 
114         #region 改变图片大小
115         /// <summary>
116         /// 改变图片大小
117         /// </summary>
118         /// <param name="image">图片</param>
119         /// <param name="width">新宽度</param>
120         /// <param name="height">新高度</param>
121         /// <returns></returns>
122         public static Image ImgSize(Image image, int width = 0, int height = 0)
123         {
124             Image img = image;//获取原始图片
125             Image newImg = new Bitmap(width, height);//裁剪后的图片
126             Graphics g = Graphics.FromImage(newImg);
127             /*设置质量*/
128             g.InterpolationMode = InterpolationMode.HighQualityBicubic;
129             g.SmoothingMode = SmoothingMode.HighQuality;
130             /*图片源位置,图片源大小*/
131             Rectangle fromR = new Rectangle(0, 0, img.Width, img.Height);
132             /*绘图位置绘图大小*/
133             if (width == 0 && height == 0) {
134                 width = img.Width;
135                 height = img.Height;
136             }
137             Rectangle toR = new Rectangle(0, 0, width, height);
138             /*画图*/
139             g.DrawImage(img, toR, fromR, System.Drawing.GraphicsUnit.Pixel);
140             /*释放截图资源*/
141             g.Dispose();
142             return newImg;
143         }
144         #endregion
145     }
146 }
View Code

 

裁剪图片

标签:

原文地址:http://www.cnblogs.com/liuph/p/4217758.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!