/// <summary> /// 合并2张网络图片 /// </summary> /// <param name="image1Url"></param> /// <param name="image2Url"></param> /// <param name="layout"></param> /// <returns></returns> public static byte[] Merge2Images(string image1Url, string image2Url, Merge2LayoutEnum layout = Merge2LayoutEnum.Merge2R1, int size = 250) { var image1 = Download(image1Url); var image2 = Download(image2Url); return(Merge2Images(image1, image2, layout, size)); }
/// <summary> /// 合并2张图片 /// </summary> /// <param name="image1"></param> /// <param name="image2"></param> /// <param name="layout"></param> /// <returns></returns> public static byte[] Merge2Images(byte[] image1, byte[] image2, Merge2LayoutEnum layout = Merge2LayoutEnum.Merge2R1, int size = 250) { var image = Merge2Images(ConvertToImage(image1), ConvertToImage(image2), layout, size); var buffers = ConvertToByte(image); image.Dispose(); return(buffers); }
private static void testMerge2(string type, string img1, string img2, Merge2LayoutEnum layout = Merge2LayoutEnum.Merge2R1) { var m1 = MergeProvider.Merge2Images(img1, img2, 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); }
/// <summary> /// 合并2张图片 /// </summary> /// <param name="image1"></param> /// <param name="image2"></param> /// <param name="layout"></param> /// <returns></returns> public static Image Merge2Images(Image image1, Image image2, Merge2LayoutEnum layout = Merge2LayoutEnum.Merge2R1, 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);//全幅背景为白色 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic; g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality; switch (layout) { /// <summary> /// 2张图片,上下各1个长方形 /// ——————————————————— /// | | /// | R1 | /// | | /// ——————————————————— /// | | /// | R2 | /// | | /// ——————————————————— /// </summary> case Merge2LayoutEnum.Merge2R1: { 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; // =250 var srcWidth = img2.Width; // =250 var srcHeight = img2.Height * newHeight / newWidth; //=250*125/250=125 g.DrawImage(img2, new Rectangle(0, height / 2, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } } break; /// <summary> /// 2张图片,左右各1个长方形 /// ——————————————————— /// | | | /// | | | /// | | | /// | R1 | R2 | /// | | | /// | | | /// | | | /// ——————————————————— /// </summary> case Merge2LayoutEnum.Merge2R2: { using (var img1 = ZoomToSqure(image1, size)) { var newWidth = width / 2; // =125 var newHeight = height; // =250 var srcWidth = img1.Width * newWidth / newHeight; //=250*125/250=125 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 newWidth = width / 2; // =125 var newHeight = height; // =250 var srcWidth = img2.Width * newWidth / newHeight; //=500*125/250=250 var srcHeight = img2.Height; // =500 g.DrawImage(img2, new Rectangle(width / 2, 0, newWidth, newHeight), new Rectangle(0, 0, srcWidth, srcHeight), GraphicsUnit.Pixel); } } break; } g.Save(); image1.Dispose(); image2.Dispose(); } using (var ms = new MemoryStream()) { bg.Save(ms, ImageFormat.Png); var buffers = ms.ToArray(); return(ConvertToImage(buffers)); } } }