标签:
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 }
标签:
原文地址:http://www.cnblogs.com/liuph/p/4217758.html