Exemplo n.º 1
0
        /// <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));
                }
            }
        }
Exemplo n.º 2
0
        /// <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));
        }
Exemplo n.º 3
0
        /// <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);
        }
Exemplo n.º 4
0
        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);
        }