Sam*_*ris 5 php c# user-profile web
越来越多的我看到公司设置用户的默认个人资料图片,如下面的截图所示,该截图来自Google主页...
Google是如何实现这一目标的?PHP和C#的哪些API可用于实现此目的?
小智 10
简单使用.Net基本库.您可以根据自己的要求进行更改.基本目的是创建用户配置文件头像图像,如果用户不使用特定图像的配置文件默认图像将被使用.我们需要制作两种常见类型的图像Rectangle和Circle.
对于圆形图像
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;
}
Run Code Online (Sandbox Code Playgroud)
对于矩形图像:
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;
}
Run Code Online (Sandbox Code Playgroud)
对于生成背景颜色可以使用:
private List<string> _BackgroundColours = new List<string> { "339966", "3366CC", "CC33FF", "FF5050" };
Run Code Online (Sandbox Code Playgroud)
我希望它会对您有所帮助,请通过您的建议来改进它.
您可以为每个字母保存一张图像
/your_path/a.png
/your_path/b.bng,
/your_path/c.png
...
Run Code Online (Sandbox Code Playgroud)
加载用户配置文件时,如果用户在数据库中没有图片文件名,则加载带有他/她首字母缩写的图像文件名。
例如...
SELECT name, address,
COALESCE(picture, CONCAT("/your_path/", LEFT(name, 1),".png")) as picture
FROM users_table WHERE... ;
Run Code Online (Sandbox Code Playgroud)
这样,当用户有图片时,将加载图片文件名,如果没有,则加载带有其姓名首字母的文件名(假设您正在使用 mysql 来存储用户数据)