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