ASP.NET Gravatar Control

Gravatar 2.0 has been out for a few weeks now and I didn't see any ASP.NET implementation listed on their site so I figured I would wip one up.

It is pretty simple to implement a Gravatar. All you need to do is set the src attribute of an img tag to a location on Gravatar's domain. The src attribute has a few parameters, but the only "tricky" one is an MD5 hash of the users email address.

Here is the code:

public class Gravatar : System.Web.UI.WebControls.Image
{
#region Rating property
public enum GravatarRating {G , PG , R , X }
private GravatarRating _Rating = GravatarRating.G;
public GravatarRating Rating
{
get { return _Rating; }// get
set { _Rating = value; }// set
}// property

#endregion

#region Size property
private int _Size=80;
/// <summary>
/// An optional "size" parameter may follow that specifies the desired width and height of the gravatar. Valid values are from 1 to 80 inclusive. Any size other than 80 will cause the original gravatar image to be downsampled using bicubic resampling before output.
/// </summary>
public int Size
{
get {
if (_Size <= 0)
return 80;
if (_Size > 80)
return 80;
return _Size;
}
set {
_Size = value;
base.Width = value;
base.Height = value;
}// set
}// property
#endregion

#region Email property
private string _Email;
public string Email
{
get { return _Email; }// get
set { _Email = value; }// set
}// property

#endregion

#region DefaultImageUrl property
private string _DefaultImageUrl;

public string DefaultImageUrl
{
get { return _DefaultImageUrl; }// get
set { _DefaultImageUrl = value; }// set
}// property

#endregion

#region Hide some members
new private string ImageUrl { get { return String.Empty; } }
/// Gravatar only supports a size property
new private int Width { get { return Size; } }
new private int Height { get { return Size; } }
#endregion

protected override void Render(System.Web.UI.HtmlTextWriter writer)
{
System.Text.StringBuilder image = new System.Text.StringBuilder();
image.Append("http://www.gravatar.com/avatar.php?");
image.Append("gravatar_id=");
image.Append(MD5HashMe(Email));
image.Append("&rating=");
image.Append(Rating.ToString());
image.Append("&size=");
image.Append(Size.ToString());

if (!String.IsNullOrEmpty(DefaultImageUrl))
{
image.Append("&default=");
image.Append(System.Web.HttpUtility.UrlEncode(DefaultImageUrl));
}

base.ImageUrl = image.ToString();
base.Render(writer);
}

private string MD5HashMe(string email)
{
System.Text.Encoder enc = System.Text.Encoding.Unicode.GetEncoder();
byte[] unicodeText = new byte[email.Length * 2];
enc.GetBytes(email.ToCharArray(), 0, email.Length, unicodeText, 0, true);

System.Security.Cryptography.MD5 md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
byte[] result = md5.ComputeHash(unicodeText);

System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < result.Length; i++)
sb.Append(resultIdea.ToString("X2"));

return sb.ToString();
}

To use this control all you need to do is add the following to your .aspx page:

<%@ Register TagPrefix="CC" Assembly="CarKnee.Controls" Namespace="CarKnee.Controls" %>
<CC:Gravatar id="g" runat="server" Size="80" Email="test@example.com" Rating="G" DefaultImageUrl="http://www.google.com/intl/en_ALL/images/logo.gif" />

The code is also available for download here.

Published Tuesday, March 13, 2007 11:15 AM
Filed under: ,

Comments

# re: ASP.NET Gravatar Control

Thursday, March 15, 2007 12:04 AM by Dave Burke

I don't get it, Carknee.  Looks like you did a great job on the .NET implementation though.  If you feel like blogging about it after you've used it a bit with an example of it in action, that would help thick guys like me understand its usefulness.  Regards!

# re: ASP.NET Gravatar Control

Thursday, March 15, 2007 8:46 AM by Sean Kearney

Hi Dave,

The Gravatar control isn't for Community Server. In order to make it work with CS I would need to modify the "Leave a Comment" form to store an email address and I don't see the point with CS 2007 hanging overhead.

Now, with CS 2007 and Ben's nice Utility Controls we can hook this up without any core changes!

This was just a silly 15 minute exercise to take my mind off my existing projects.

# Adding Gravatars to your ASP.NET site in a few lines of code

Monday, September 24, 2007 2:25 AM by Jon Galloway

Summary Gravatar (Globally Recognized Avatar) provides a simple way to add avatars to community based

Powered by Community Server (Non-Commercial Edition), by Telligent Systems