如何使用预定义的调色板映射每个像素的rgb值?

时间:2017-01-31 13:20:00

标签: javascript image mapping gif color-palette

我想将png图像转换为gif。为此,我通过将其重新绘制到HTML画布中来读取该png图像中的每个像素数据。然后我从那个png图像数据中删除了alpha通道。最后,我将该像素阵列量化为256色调色板。 现在要构建gif图像,我现在要将每个像素映射到它在调色板中最接近的颜色。我比较了像素和调色板中每种颜色之间的欧几里德距离。这需要很长时间,而且我的Gif质量很差。将图像中的每个像素映射到gif调色板的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

尝试使用HSV颜色空间而不是RGB空间。

看看这个问题:

Calculate distance between colors in HSV space

在比较颜色时,HSV空间中的“距离”代表我们的眼睛测量为“距离”的更好。您可以尝试通过对颜色的色相,饱和度和值部分应用不同的权重来摆弄。 我们的眼睛具有20倍于亮/暗识别和颜色识别的接收器,因此尝试给予Value-part稍高的重量。

对于性能部分:您可以非常好地并行运行颜色近似操作,因为每个像素都独立于其他像素。

最后:256种颜色相当低,所以不要期望很好的图像质量。你将16.700.000种颜色减少到256只,记住这一点。