.Net 生成微信群聊头像Logo的实现

244 阅读4分钟


实现原理:根据C#内置的图形处理的类库进行图片的合成

代码实现:

using System.Drawing;
using System.Drawing.Imaging;

public string CreateGroupLogo(int logoNum)
{

    //头像个数
    int Num = logoNum;    string SavePath = Server.MapPath("/Content/Apps/GroupLogo/");
    string LogoName = "Grouplogo.png";
    //新建一个底层图层
    int width = 200, height = 200;
    Bitmap RawBm = new Bitmap(width, height);

    Graphics g = Graphics.FromImage(RawBm);
    // 底色设置
    g.Clear(Color.Gray);
    //定义一个区域
    int rWidth = 50, rHeight = 50;
    Rectangle rg = new Rectangle(0, 0, rWidth, rHeight);

    //头像个数
    switch (Num)
    {
        case 1:
            Rectangle rg1 = new Rectangle(50, 50, 100, 100);
            Bitmap bm1 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm1, rg1);
            RawBm.Save(SavePath + LogoName, ImageFormat.Png);
            break;
        case 2:
            Rectangle rg2_1 = new Rectangle(7, 55, 90, 90);
            Bitmap bm2_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg2_2 = new Rectangle(104, 55, 90, 90);
            Bitmap bm2_2 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm2_1, rg2_1);
            g.DrawImage(bm2_2, rg2_2);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);
            break;
        case 3:
            Rectangle rg3_1 = new Rectangle(55, 7, 90, 90);
            Bitmap bm3_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg3_2 = new Rectangle(7, 105, 90, 90);
            Bitmap bm3_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg3_3 = new Rectangle(104, 105, 90, 90);
            Bitmap bm3_3 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm3_1, rg3_1);
            g.DrawImage(bm3_2, rg3_2);
            g.DrawImage(bm3_3, rg3_3);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);
            break;
        case 4:
            Rectangle rg4_1 = new Rectangle(7, 7, 90, 90);
            Bitmap bm4_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg4_2 = new Rectangle(104, 7, 90, 90);
            Bitmap bm4_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg4_3 = new Rectangle(7, 105, 90, 90);
            Bitmap bm4_3 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg4_4 = new Rectangle(104, 105, 90, 90);
            Bitmap bm4_4 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm4_1, rg4_1);
            g.DrawImage(bm4_2, rg4_2);
            g.DrawImage(bm4_3, rg4_3);
            g.DrawImage(bm4_4, rg4_4);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);

            break;
        case 5:
            Rectangle rg5_1 = new Rectangle(38, 35, 60, 60);
            Bitmap bm5_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg5_2 = new Rectangle(103, 35, 60, 60);
            Bitmap bm5_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg5_3 = new Rectangle(5, 105, 60, 60);
            Bitmap bm5_3 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg5_4 = new Rectangle(70, 105, 60, 60);
            Bitmap bm5_4 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg5_5 = new Rectangle(135, 105, 60, 60);
            Bitmap bm5_5 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm5_1, rg5_1);
            g.DrawImage(bm5_2, rg5_2);
            g.DrawImage(bm5_3, rg5_3);
            g.DrawImage(bm5_4, rg5_4);
            g.DrawImage(bm5_5, rg5_5);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);

            break;
        case 6:
            Rectangle rg6_1 = new Rectangle(5, 38, 60, 60);
            Bitmap bm6_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg6_2 = new Rectangle(70, 38, 60, 60);
            Bitmap bm6_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg6_3 = new Rectangle(135, 38, 60, 60);
            Bitmap bm6_3 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg6_4 = new Rectangle(5, 104, 60, 60);
            Bitmap bm6_4 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg6_5 = new Rectangle(70, 104, 60, 60);
            Bitmap bm6_5 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg6_6 = new Rectangle(135, 104, 60, 60);
            Bitmap bm6_6 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm6_1, rg6_1);
            g.DrawImage(bm6_2, rg6_2);
            g.DrawImage(bm6_3, rg6_3);
            g.DrawImage(bm6_4, rg6_4);
            g.DrawImage(bm6_5, rg6_5);
            g.DrawImage(bm6_6, rg6_6);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);

            break;
        case 7:
            Rectangle rg7_1 = new Rectangle(70, 5, 60, 60);
            Bitmap bm7_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg7_2 = new Rectangle(5, 70, 60, 60);
            Bitmap bm7_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg7_3 = new Rectangle(70, 70, 60, 60);
            Bitmap bm7_3 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg7_4 = new Rectangle(135, 70, 60, 60);
            Bitmap bm7_4 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg7_5 = new Rectangle(5, 135, 60, 60);
            Bitmap bm7_5 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg7_6 = new Rectangle(70, 135, 60, 60);
            Bitmap bm7_6 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg7_7 = new Rectangle(135, 135, 60, 60);
            Bitmap bm7_7 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm7_1, rg7_1);
            g.DrawImage(bm7_2, rg7_2);
            g.DrawImage(bm7_3, rg7_3);
            g.DrawImage(bm7_4, rg7_4);
            g.DrawImage(bm7_5, rg7_5);
            g.DrawImage(bm7_6, rg7_6);
            g.DrawImage(bm7_7, rg7_7);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);
            break;
        case 8:

            Rectangle rg8_1 = new Rectangle(38, 5, 60, 60);
            Bitmap bm8_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_2 = new Rectangle(103, 5, 60, 60);
            Bitmap bm8_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_3 = new Rectangle(5, 70, 60, 60);
            Bitmap bm8_3 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_4 = new Rectangle(70, 70, 60, 60);
            Bitmap bm8_4 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_5 = new Rectangle(135, 70, 60, 60);
            Bitmap bm8_5 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_6 = new Rectangle(5, 135, 60, 60);
            Bitmap bm8_6 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_7 = new Rectangle(70, 135, 60, 60);
            Bitmap bm8_7 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg8_8 = new Rectangle(135, 135, 60, 60);
            Bitmap bm8_8 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm8_1, rg8_1);
            g.DrawImage(bm8_2, rg8_2);
            g.DrawImage(bm8_3, rg8_3);
            g.DrawImage(bm8_4, rg8_4);
            g.DrawImage(bm8_5, rg8_5);
            g.DrawImage(bm8_6, rg8_6);
            g.DrawImage(bm8_7, rg8_7);
            g.DrawImage(bm8_8, rg8_8);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);
            break;
        case 9:

                Rectangle rg9_1 = new Rectangle(5, 5, 60, 60);
            Bitmap bm9_1 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_2 = new Rectangle(70, 5, 60, 60);
            Bitmap bm9_2 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_3 = new Rectangle(135, 5, 60, 60);
            Bitmap bm9_3 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_4 = new Rectangle(5, 70, 60, 60);
            Bitmap bm9_4 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_5 = new Rectangle(70, 70, 60, 60);
            Bitmap bm9_5 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_6 = new Rectangle(135, 70, 60, 60);
            Bitmap bm9_6 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_7 = new Rectangle(5, 135, 60, 60);
            Bitmap bm9_7 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_8 = new Rectangle(70, 135, 60, 60);
            Bitmap bm9_8 = new Bitmap(SavePath + "1.jpg");

            Rectangle rg9_9 = new Rectangle(135, 135, 60, 60);
            Bitmap bm9_9 = new Bitmap(SavePath + "1.jpg");

            g.DrawImage(bm9_1, rg9_1);
            g.DrawImage(bm9_2, rg9_2);
            g.DrawImage(bm9_3, rg9_3);
            g.DrawImage(bm9_4, rg9_4);
            g.DrawImage(bm9_5, rg9_5);
            g.DrawImage(bm9_6, rg9_6);
            g.DrawImage(bm9_7, rg9_7);
            g.DrawImage(bm9_8, rg9_8);
            g.DrawImage(bm9_9, rg9_9);

            RawBm.Save(SavePath + LogoName, ImageFormat.Png);
            break;

        default:
            break;
    }
    return "";
}


最后,上述代码是最基本的实现,可根据具体情况进行修改,后续会更新更加高效的写法,避免一些重复代码的发生