将默认用户配置文件图片设置为其姓名缩写的图像

10
越来越多的公司将用户的默认个人资料图片设置为下面截图中显示的样式,这是来自Google首页的样例...

enter image description here

Google是如何实现这一点的?

1
请查看此网址:在.NET中创建圆形头像图片 - Çağdaş Karademir
2个回答

22

简单使用 .Net 基本库。您可以根据自己的要求进行更改。 基本目的是为了创建用户个人资料头像图像,如果用户没有使用特定图像作为个人资料,则将使用默认图像。 我们需要制作两种常见类型的图片:矩形和圆形。

对于圆形图像

public MemoryStream GenerateCircle(string firstName, string lastName)
    {
        var avatarString = string.Format("{0}{1}", firstName[0], lastName[0]).ToUpper();

        var randomIndex = new Random().Next(0, _BackgroundColours.Count - 1);
        var bgColour = _BackgroundColours[randomIndex];

        var bmp = new Bitmap(192, 192);
        var sf = new StringFormat();
        sf.Alignment = StringAlignment.Center;
        sf.LineAlignment = StringAlignment.Center;

        var font = new Font("Arial", 72, FontStyle.Bold, GraphicsUnit.Pixel);
        var graphics = Graphics.FromImage(bmp);

        graphics.Clear(Color.Transparent);
        graphics.SmoothingMode = SmoothingMode.AntiAlias;
        graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
        using (Brush b = new SolidBrush(ColorTranslator.FromHtml("#" + bgColour)))
        {
            graphics.FillEllipse(b, new Rectangle(0, 0, 192, 192));
        }
        graphics.DrawString(avatarString, font, new SolidBrush(Color.WhiteSmoke), 95, 100, sf);
        graphics.Flush();

        var ms = new MemoryStream();
        bmp.Save(ms, ImageFormat.Png);
        return ms;
    }

对于矩形图片:

public MemoryStream GenerateRactangle(string firstName, string lastName)
    {
        var avatarString = string.Format("{0}{1}", firstName[0], lastName[0]).ToUpper();

        var randomIndex = new Random().Next(0, _BackgroundColours.Count - 1);
        var bgColour = _BackgroundColours[randomIndex];

        var bmp = new Bitmap(192, 192);
        var sf = new StringFormat();
        sf.Alignment = StringAlignment.Center;
        sf.LineAlignment = StringAlignment.Center;

        var font = new Font("Arial", 72, FontStyle.Bold, GraphicsUnit.Pixel);
        var graphics = Graphics.FromImage(bmp);

        graphics.Clear((Color)new ColorConverter().ConvertFromString("#" + bgColour));
        graphics.SmoothingMode = SmoothingMode.AntiAlias;
        graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;
        graphics.DrawString(avatarString, font, new SolidBrush(Color.WhiteSmoke), new RectangleF(0, 0, 192, 192), sf);

        graphics.Flush();

        var ms = new MemoryStream();
        bmp.Save(ms, ImageFormat.Png);

        return ms;
    }

用于生成背景随机颜色的方法:

private List<string> _BackgroundColours = new List<string> { "339966", "3366CC", "CC33FF", "FF5050" };

我希望这可以帮到你,如果有任何建议请提出来以便改进。


1

你可以为每个字母保存一张图片

/your_path/a.png
/your_path/b.bng, 
/your_path/c.png
...

在加载用户配置文件时,如果数据库中没有用户的图片文件名,则使用其初始字母代替加载图像的文件名。

例如...

SELECT name, address, 
COALESCE(picture, CONCAT("/your_path/", LEFT(name, 1),".png")) as picture
FROM users_table WHERE... ; 

这样,当用户有一张图片时,加载图片的文件名,如果没有,则加载带有他的首字母的文件名(假设您使用mysql来存储用户数据)。

你可以采用比硬编码这些图像更好的方法。 - Mohit Sehgal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接