Beispiel #1
0
        /// <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));
        }
Beispiel #2
0
        /// <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);
        }
Beispiel #3
0
        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);
        }
Beispiel #4
0
        /// <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));
                }
            }
        }