2
我用的是FreeImageNET libary量化我的位图作为减少颜色使用的FreeImage库(C#)
using (FreeImageAPI.FreeImageBitmap fiBitmap = FreeImageAPI.FreeImageBitmap.FromHbitmap(bmp.GetHbitmap()))
{
if (fiBitmap.ColorDepth > 24)
{
fiBitmap.ConvertColorDepth(FreeImageAPI.FREE_IMAGE_COLOR_DEPTH.FICD_08_BPP);
}
//quantize using the NeuQuant neural-net quantization algorithm
fiBitmap.Quantize(FreeImageAPI.FREE_IMAGE_QUANTIZE.FIQ_NNQUANT, 256);
fiBitmap.Save("test_z.png", FreeImageAPI.FREE_IMAGE_FORMAT.FIF_PNG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.PNG_Z_BEST_COMPRESSION);
//fiBitmap.Save(ms, FreeImageAPI.FREE_IMAGE_FORMAT.FIF_PNG, FreeImageAPI.FREE_IMAGE_SAVE_FLAGS.PNG_Z_DEFAULT_COMPRESSION);
}
这给了我一个PNG-8,有256种颜色的调色板中PNG-8调色板计数。 使用Photoshop我发现,如果我使用自适应算法并减少调色板,例如128,64,16等,我可以进一步缩小尺寸。再次打开它可以让Photoshop填充剩余(较高)索引中的灰度级。
我不能让FreeImageAPI.FreeImageBitmap.Quantize()
生产出类似PNG,用有限的调色板,一拉 PIL convert()
在这里你可以同时指定算法和调色板大小。
谢谢。
Awww,可能你不能,但是很想在你的答案中看到一些源代码或更多细节,因为我自己也在处理同样的事情。 – eselk 2012-04-24 22:28:42
我也是。另外,你决定使用哪种算法? – wil 2013-11-13 08:56:44
有一段时间没有检查过,我用Octree量化,代码在这里https://github.com/nisheeth-barthwal/Overmind/tree/master/NX_Unsafe/Imaging – nbaztec 2014-11-26 15:23:31