Png NeuQuant Example
PNG Indexed format Format Conversion
Saves image to PNG format using different bitness, color quantization and dithering algorithms.
Сode Snippet
public static void Run()
{
Save("Chicago.jpg");
Save("Stamp.png");
}
private static void Save(string sourceFileName)
{
// Source file information
long sourceFileSize = new System.IO.FileInfo(sourceFileName).Length;
Console.WriteLine("Source file:");
Console.WriteLine(" {0}", sourceFileName);
Console.WriteLine(" {0:f2} KB", sourceFileSize / 1024f);
var baseName = System.IO.Path.GetFileNameWithoutExtension(sourceFileName);
// Convert to 24-bit PNG
{
var png24bitFileName = baseName + "_24bit.png";
// Save to PNG
using (var bitmap = new Bitmap(sourceFileName))
{
bitmap.Save(png24bitFileName, new PngSettings(true));
}
long png24bitFileSize = new System.IO.FileInfo(png24bitFileName).Length;
Console.WriteLine("PNG 24-bit:");
Console.WriteLine(" {0}", png24bitFileName);
Console.WriteLine(" {0:f2} KB ({1:f2}%)", (float)png24bitFileSize / 1024f, (float)png24bitFileSize / (float)sourceFileSize * 100f);
}
// Convert to 8-bit PNG using the Octree color quantization and Floyd–Steinberg dithering algorithms
{
var png8bitFileName = baseName + "_8bit.png";
// Save to PNG
using (var bitmap = new Bitmap(sourceFileName))
{
bitmap.ColorManagement.Convert(PixelFormat.Format8bppIndexed);
bitmap.Save(png8bitFileName, new PngSettings(true));
}
long png8bitFileSize = new System.IO.FileInfo(png8bitFileName).Length;
Console.WriteLine("PNG 8-bit (Octree, Floyd–Steinberg, no alpha transparency):");
Console.WriteLine(" {0}", png8bitFileName);
Console.WriteLine(" {0:f2} KB ({1:f2}%)", (float)png8bitFileSize / 1024f, (float)png8bitFileSize / (float)sourceFileSize * 100f);
}
// Convert to 8-bit PNG using the Neuquant color quantization algorithm
{
var png8bitNeuQuantFileName = baseName + "_8bit_NeuQuant.png";
// Save to PNG
using (var bitmap = new Bitmap(sourceFileName))
{
bitmap.ColorManagement.Palette = new ColorPalette(ColorPaletteType.NeuQuant);
bitmap.ColorManagement.Convert(PixelFormat.Format8bppIndexed);
bitmap.Save(png8bitNeuQuantFileName, new PngSettings(true));
}
long png8bitNeuQuantFileSize = new System.IO.FileInfo(png8bitNeuQuantFileName).Length;
Console.WriteLine("PNG 8-bit (NeuQaunt, with alpha transparency):");
Console.WriteLine(" {0}", png8bitNeuQuantFileName);
Console.WriteLine(" {0:f2} KB ({1:f2}%)", (float)png8bitNeuQuantFileSize / 1024f, (float)png8bitNeuQuantFileSize / (float)sourceFileSize * 100f);
}
}
Input
Chicago.jpg
Stamp.png
Output
PngNeuQuant.txt
Source file:
Chicago.jpg
101.28 KB
PNG 24-bit:
Chicago_24bit.png
535.18 KB (528.40%)
PNG 8-bit (Octree, Floyd–Steinberg, no alpha transparency):
Chicago_8bit.png
191.58 KB (189.16%)
PNG 8-bit (NeuQaunt, with alpha transparency):
Chicago_8bit_NeuQuant.png
204.09 KB (201.50%)
Source file:
Stamp.png
225.84 KB
PNG 24-bit:
Stamp_24bit.png
306.25 KB (135.60%)
PNG 8-bit (Octree, Floyd–Steinberg, no alpha transparency):
Stamp_8bit.png
72.90 KB (32.28%)
PNG 8-bit (NeuQaunt, with alpha transparency):
Stamp_8bit_NeuQuant.png
90.76 KB (40.19%)
Chicago_24bit.png
Chicago_8bit.png
Chicago_8bit_NeuQuant.png
Stamp_24bit.png
Stamp_8bit.png
Stamp_8bit_NeuQuant.png
For AI-assisted development: Download Graphics Mill Code Samples XML Catalog