【发布时间】:2012-06-13 20:10:57
【问题描述】:
我有一个 4x4 像素的图像,每个像素都有我想要的确切颜色,例如 #439902 等,
我使用 gd 的 imagetruecolortopalette() 函数抓取我的图像将其转换为调色板,然后我尝试使用 imagecolorclosest() 函数在我的图像中找到与另一种预定义颜色最接近的颜色,问题是它带回了不同的颜色总的来说,我的 4x4 图像中没有一张,颜色接近我的一种颜色,但我需要它。
我认为问题在于,当我使用 imagetruecolortopalette() 函数时,我的 4x4 图像中的所有颜色都会略有变化,
有没有办法解决这个问题。?
举个例子……
如果我搜索 (66,100,39),我最接近的匹配是:(76,90,56)。
76,90,56 发生了变化,因为在我的原始图像中颜色为 (78,98,43)。 我知道它并不遥远,但我需要它保持不变
【问题讨论】:
-
colorclosest 就像颜色是 3d 空间中的点一样工作 - 两个颜色“点”之间最近的直线距离不一定是最接近的“视觉”匹配。您可能想尝试 imagecolorclosestwb(),它在感知上比在数学上更有效。
-
我了解色彩空间及其背后的数学原理。它使用直线距离选择最接近的颜色不是问题。只要它在我的图像中获得颜色..确实如此,问题是我原始保存图像的颜色与输出图像不同,我的图像是PNG并输出为PNG,我比较了两个图像它们是不同颜色的像素。我认为这是一个压缩问题,但我尝试将其保存为 PNG 和 JPG,虽然颜色结果略有不同,但它们仍然与原始 PNG 图像不匹配。
标签: php colors imagemagick gd closest