對於一個網站來說,圖片顯示都是有一定的寬高比的,而客戶上傳的圖片大多未經過剪切,故上傳以後對圖片進行一定的剪切是非常必要的。
如此,我們應當剪一個類來完成這項工作。
public class ImageHelper{ ///圖片寬高比,默認1.333 double _webWidth=1.333; /// <summary> ///網站顯示圖片的 寬/高比 /// </summary> public double WebWidth { get { return _webWidth; } set {_webWidth = value; } } /// <summary> /// 根據寬高比剪切圖片,_webWidth /// </summary> /// <param name="img">需要剪切的圖片</param> /// <returns></returns> public Bitmap CutImage(Bitmap img) { int width = img.Width; int height = img.Height; Rectangle section = new Rectangle(); //假如寬帶高於高度圖片 if (width >= height) { //根據網站寬高比例計算出寬度 section.Width = (int)(height * _webWidth); //剪切寬大於原寬,取原寬 if (section.Width > width) section.Width = width; section.Height = height; section.Y = 0; //計算出開始截圖的X定位,計算方式為(原寬-剪切寬/2) section.X = (int)((width - section.Width) / 2); } ///假如高度大於寬度的圖片 if (width < height) { //根據寬高比計算出高度,為寬度/寬高比 section.Height = (int)(width / _webWidth); //剪切寬大於原高,取原高 if (section.Height > height) section.Height = height; section.Width = width; section.X = 0; //計算出開始截圖的Y定位,計算方式為(原高-剪切高/2) section.Y = (int)((height - section.Height) / 2); } Bitmap pickedImage = new Bitmap(section.Width, section.Height); Graphics pickedG = Graphics.FromImage(pickedImage); //開始剪切並填充 pickedG.DrawImage(img, new Rectangle(0, 0, section.Width, section.Height), section, GraphicsUnit.Pixel); return pickedImage; } }