Created
April 13, 2016 15:20
-
-
Save JimBobSquarePants/f39697395a46e5358f3cfe9425f55628 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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// <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