C#图片处理之:图片缩放和剪裁
一、C#图片处理之:图片缩放和剪裁 封装
此代码是针对.net core 的
使用如下:
public static void ImgOne() { // Image // Bitmap ImageOperate.Cut(@"E:\MyDll\QLCommon\test\1.jpg", @"E:\MyDll\QLCommon\test\11.jpg",100, 100); Console.WriteLine("操作成功"); }
结果如下:
二、代码封装如下:
/// <summary> /// 图片处理使用封装 /// </summary> public class ImageOperate { /// <summary> /// 图片剪切,固定格式jpg /// 最大化缩放 /// </summary> /// <param name="source"></param> /// <param name="target"></param> /// <param name="width"></param> /// <param name="height"></param> /// <exception cref="Exception"></exception> public static void Cut(string source, string target, int width, int height) { // if (File.Exists(source) == false) throw new Exception("图片文件不存在"); Image img = Bitmap.FromFile(source); //图片缩放 int realWidth = 0, realHeight = 0, realLeft = 0, realTop = 0; if (img.Width > img.Height) { realHeight = height; realWidth = Convert.ToInt32(height * 1.0 / img.Height * img.Width); realLeft = (img.Width - realWidth) / 2; realTop = 0; } else { realWidth = width; realHeight = Convert.ToInt32(width * 1.0 / img.Width * img.Height); realLeft = 0; realTop = (img.Height - realHeight) / 2; } Bitmap oldMap = ResizeBitmap(new Bitmap(img), realWidth, realHeight); int left = Convert.ToInt32((oldMap.Width - width) / 2.0); int top = Convert.ToInt32((oldMap.Height - height) / 2.0); //剪切 Bitmap map = CutBitmap(oldMap, left, top, width, height); //保存到磁盘 map.Save(target, ImageFormat.Jpeg); } /// <summary> /// 等比例缩放图片 /// </summary> /// <param name="bmp"></param> /// <param name="newW"></param> /// <param name="newH"></param> /// <returns></returns> public static Bitmap ResizeBitmap(Bitmap bmp, int newW, int newH) { try { Bitmap b = new Bitmap(newW, newH); Graphics g = Graphics.FromImage(b); // 插值算法的质量 g.InterpolationMode = InterpolationMode.HighQualityBicubic; g.DrawImage(bmp, new Rectangle(0, 0, newW, newH), new Rectangle(0, 0, bmp.Width, bmp.Height), GraphicsUnit.Pixel); g.Dispose(); return b; } catch { return null; } } /// <summary> /// 剪裁 -- 用GDI+ /// </summary> /// <param name="b">原始Bitmap</param> /// <param name="StartX">开始坐标X</param> /// <param name="StartY">开始坐标Y</param> /// <param name="iWidth">宽度</param> /// <param name="iHeight">高度</param> /// <returns>剪裁后的Bitmap</returns> public static Bitmap CutBitmap(Bitmap b, int StartX, int StartY, int iWidth, int iHeight) { if (b == null) { return null; } int w = b.Width; int h = b.Height; if (StartX >= w || StartY >= h) { return null; } if (StartX + iWidth > w) { iWidth = w - StartX; } if (StartY + iHeight > h) { iHeight = h - StartY; } try { Bitmap bmpOut = new Bitmap(iWidth, iHeight, PixelFormat.Format24bppRgb); Graphics g = Graphics.FromImage(bmpOut); g.DrawImage(b, new Rectangle(0, 0, iWidth, iHeight), new Rectangle(StartX, StartY, iWidth, iHeight), GraphicsUnit.Pixel); g.Dispose(); return bmpOut; } catch { return null; } } }
更多: