Skip to content

Instantly share code, notes, and snippets.

@anthonyec
Forked from JimBobSquarePants/DominantColors.cs
Created May 19, 2016 12:26
Show Gist options
  • Save anthonyec/206cd547e1264c76f922dfd7666f5c8a to your computer and use it in GitHub Desktop.
Save anthonyec/206cd547e1264c76f922dfd7666f5c8a to your computer and use it in GitHub Desktop.
An ImageProcessor Core equivalent to the output described at https://manu.ninja/dominant-colors-for-lazy-loading-images
/// <summary>
/// Returns a 1x1 pixel Base64 encoded gif from the given image containing a single dominant color.
/// </summary>
/// <param name="source">The image this method extends.</param>
/// <returns>The <see cref="string"/></returns>
public static string ToBase64GifPixelString(this Image source)
{
// Leave the original image intact
using (Image temp = new Image(source))
{
Bgra32 color = new OctreeQuantizer().Quantize(temp.Resize(250, 250), 1).Palette[0];
byte[] gif = {
0x47, 0x49, 0x46, 0x38, 0x39, 0x61, // Header
0x01, 0x00, 0x01, 0x00, 0x80, 0x01, 0x00, // Logical Screen Descriptor
color.R, color.G, color.B, 0x00, 0x00, 0x00, // Global Color Table
0x2C, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, // Image Descriptor
0x02, 0x02, 0x44, 0x01, 0x00 // Image Data
};
return "data:image/gif;base64," + Convert.ToBase64String(gif);
}
}
/// <summary>
/// Returns a 3x3 pixel Base64 encoded gif from the given image.
/// </summary>
/// <param name="source">The image this method extends.</param>
/// <returns>The <see cref="string"/></returns>
public static string ToBase64GifString(this Image source)
{
// Leave the original image intact
using (Image temp = new Image(source))
using (MemoryStream stream = new MemoryStream())
{
temp.Resize(3, 3).SaveAsGif(stream);
stream.Flush();
return "data:image/gif;base64," + Convert.ToBase64String(stream.ToArray());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment