-
-
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
This file contains 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