【问题标题】:why are my colours changing when i use imagetruecolortopalette()?为什么当我使用 imagetruecolortopalette() 时我的颜色会发生变化?
【发布时间】: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


【解决方案1】:

如果您保存为 jpg,则可能是压缩问题;尝试另存为 png,因为它不压缩并且比 jpg 具有更多颜色。

一些来自 IM 论坛的代码:

exec("convert square.png[1x1+0+0] -format " .
     "\"%[fx:floor(255*u.r)],%[fx:floor(255*u.g)],%[fx:floor(255*u.b)]\" " .
     "info: 2>&1",$result);
      print_r($result);

我认为这里走错路了,因为这会识别颜色,而这不是你想要的?

【讨论】:

  • 我认为这是一个压缩问题,但我尝试将其保存为 PNG 和 JPG,尽管颜色结果略有不同,但它们仍然与原始 PNG 图像不匹配。
【解决方案2】:

但是php已经有这个功能了:

imagecolorexact

【讨论】:

  • 我的图像中可能没有确切的颜色,所以我只想要最接近的颜色,并且最接近的颜色效果很好,只是保存时颜色会略有变化
  • imagepng 有压缩选项和过滤器;你尝试过默认方式(什么都不通过)还是玩过这些?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 2021-09-24
  • 1970-01-01
  • 2021-02-13
  • 2018-09-17
相关资源
最近更新 更多