/// <summary> /// 合并3张图片 /// </summary> /// <param name="image1"></param> /// <param name="image2"></param> /// <param name="image3"></param> /// <param name="layout"></param> /// <returns></returns> public static Image Merge3Images(Image image1, Image image2, Image image3, Merge3LayoutEnum layout = Merge3LayoutEnum.Merge1R2S1, int size = 250) { var width = size; var height = size; var pf = PixelFormat.Format32bppArgb; using (var bg = new Bitmap(width, height, pf)) { using (var g = Graphics.FromImage(bg)) { g.FillRectangle((Brush)Brushes.White, 0, 0, width, height);//全幅背景为白色 switch (layout) { /// <summary> /// 3张图片, 上面一个长方形,下面2个正方形并排 /// ——————————————————— /// | | /// | R1 | /// | | /// ——————————————————— /// | | | /// | S1 | S2 | /// | | | /// ——————————————————— /// </summary> case Merge3LayoutEnum.Merge1R2S1: { using (var img1 = ZoomToSqure(image1, size)) { var newHeight = height / 2; // =125 var newWidth = width; // =250 var srcWidth = img1.Width; // =250 var srcHeight = img1.Height * newHeight / newWidth; //=250*125/250=125 g.DrawImage(img1, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img2 = ZoomToSqure(image2, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img2.Width; // =250 var srcHeight = img2.Height; // =250 g.DrawImage(img2, new Rectangle(0, height / 2, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img3 = ZoomToSqure(image3, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img3.Width; // =250 var srcHeight = img3.Height; // =250 g.DrawImage(img3, new Rectangle(width / 2, height / 2, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } } break; /// <summary> /// 3张图片,上面2个正方形并排,下面一个长方形 /// ——————————————————— /// | | | /// | S1 | S2 | /// | | | /// ——————————————————— /// | | /// | R1 | /// | | /// ——————————————————— /// </summary> case Merge3LayoutEnum.Merge1R2S2: { using (var img1 = ZoomToSqure(image1, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img1.Width; // =250 var srcHeight = img1.Height; // =250 g.DrawImage(img1, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img2 = ZoomToSqure(image2, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img2.Width; // =250 var srcHeight = img2.Height; // =250 g.DrawImage(img2, new Rectangle(width / 2, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img3 = ZoomToSqure(image3, size)) { var newHeight = height / 2; // =125 var newWidth = width; // =250 var srcWidth = img3.Width; // =250 var srcHeight = img3.Height * newHeight / newWidth; //=250*125/250=125 g.DrawImage(img3, new Rectangle(0, height / 2, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } } break; /// <summary> /// 3张图片,上面2个正方形并排,下面一个长方形 /// ——————————————————— /// | | | /// | | S1 | /// | | | /// | R1 |————————— /// | | | /// | | S2 | /// | | | /// ——————————————————— /// </summary> case Merge3LayoutEnum.Merge1R2S3: { using (var img1 = ZoomToSqure(image1, size)) { var newHeight = height; // =250 var newWidth = width / 2; // =125 var srcHeight = img1.Height; //=250 var srcWidth = img1.Width * newWidth / newHeight; // =250*125/250=125; g.DrawImage(img1, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img2 = ZoomToSqure(image2, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img2.Width; // =250 var srcHeight = img2.Height; // = 250 g.DrawImage(img2, new Rectangle(width / 2, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img3 = ZoomToSqure(image3, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img3.Width; // =250 var srcHeight = img3.Height; // =250 g.DrawImage(img3, new Rectangle(width / 2, height / 2, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } } break; /// <summary> /// 3张图片,上面2个正方形并排,下面一个长方形 /// ——————————————————— /// | | | /// | S2 | | /// | | | /// |—————————| R1 | /// | | | /// | S2 | | /// | | | /// ——————————————————— /// </summary> case Merge3LayoutEnum.Merge1R2S4: { using (var img1 = ZoomToSqure(image1, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img1.Width; // =250 var srcHeight = img1.Height; // =250 g.DrawImage(img1, new Rectangle(0, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img2 = ZoomToSqure(image2, size)) { var newHeight = height / 2; // =125 var newWidth = width / 2; // =125 var srcWidth = img2.Width; // =250 var srcHeight = img2.Height; // =250 g.DrawImage(img2, new Rectangle(0, height / 2, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } using (var img3 = ZoomToSqure(image3, size)) { var newHeight = height; // =250 var newWidth = width / 2; // =125 var srcHeight = img3.Height; //=250 var srcWidth = img3.Width * newWidth / newHeight; // =250*125/250=125; g.DrawImage(img3, new Rectangle(width / 2, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } } break; } g.Save(); image1.Dispose(); image2.Dispose(); image3.Dispose(); } using (var ms = new MemoryStream()) { bg.Save(ms, ImageFormat.Png); var buffers = ms.ToArray(); return(ConvertToImage(buffers)); } } }
/// <summary> /// 合并3张网络图片 /// </summary> /// <param name="image1Url"></param> /// <param name="image2Url"></param> /// <param name="image3Url"></param> /// <param name="layout"></param> /// <returns></returns> public static byte[] Merge3Images(string image1Url, string image2Url, string image3Url, Merge3LayoutEnum layout = Merge3LayoutEnum.Merge1R2S1, int size = 250) { var image1 = Download(image1Url); var image2 = Download(image2Url); var image3 = Download(image3Url); return(Merge3Images(image1, image2, image3, layout, size)); }
/// <summary> /// 合并3张图片 /// </summary> /// <param name="image1"></param> /// <param name="image2"></param> /// <param name="image3"></param> /// <param name="layout"></param> /// <returns></returns> public static byte[] Merge3Images(byte[] image1, byte[] image2, byte[] image3, Merge3LayoutEnum layout = Merge3LayoutEnum.Merge1R2S1, int size = 250) { var image = Merge3Images(ConvertToImage(image1), ConvertToImage(image2), ConvertToImage(image3), layout, size); var buffers = ConvertToByte(image); image.Dispose(); return(buffers); }
private static void testMerge3(string type, string img1, string img2, string img3, Merge3LayoutEnum layout = Merge3LayoutEnum.Merge1R2S1) { var m1 = MergeProvider.Merge3Images(img1, img2, img3, layout, 250); var image1 = MergeProvider.ConvertToImage(m1); var m1Path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, type + "-" + layout.ToString() + ".png"); if (File.Exists(m1Path)) { File.Delete(m1Path); } image1.Save(m1Path); }