Php 用HSL+GD替换色调?

Php 用HSL+GD替换色调?,php,colors,gd,hsl,Php,Colors,Gd,Hsl,我们正在处理一个基础图像,该图像有三种色调,分别为蓝色645591、6B90CA和7BC8EF,其中一种颜色由用户选择,将替换基础上的第一个蓝色值,并为要替换的额外两种颜色生成两种色调 我发现这是非常有效和有用的,但问题是如何计算一种颜色和另一种颜色之间的差异,以便我可以在完全不同的颜色中重复使用这种差异 首先,我想我可以得到RGB的差异,然后把它添加到新的颜色中,这对我来说太天真了 然后,在一些研究之后,HSL似乎是一种可行的方法,所以我计算了基础蓝色第一个值和下两个值之间的差值,这样我肯定可

我们正在处理一个基础图像,该图像有三种色调,分别为蓝色645591、6B90CA和7BC8EF,其中一种颜色由用户选择,将替换基础上的第一个蓝色值,并为要替换的额外两种颜色生成两种色调

我发现这是非常有效和有用的,但问题是如何计算一种颜色和另一种颜色之间的差异,以便我可以在完全不同的颜色中重复使用这种差异

首先,我想我可以得到RGB的差异,然后把它添加到新的颜色中,这对我来说太天真了

然后,在一些研究之后,HSL似乎是一种可行的方法,所以我计算了基础蓝色第一个值和下两个值之间的差值,这样我肯定可以选择另一个值并将差值相加,对吗?好事实证明,它没有:

下一步也是当前的尝试是不使用色调值,而是添加饱和度和光照值的原始差异,结果非常好,但我不确定它是否适用于不同的颜色

有没有办法在颜色变化时保持色调? HSL是要走的路吗? 我有一种感觉,把它转换成灰阶,然后从那里着色,对吗? 下面是代码,我用CSS测试了这个概念,但是工具是PHP+GD

<style>
span{
  display: inline-block;
  width: 100px;
  height: 400px;
  float: left;
}
.c1{
  background: #645591;
  /* hsl(255, 26%, 45%) */
}
.c2{
  background: #6B90CA;
  /* hsl(217, 47%, 61%) */
}
.c3{
  background: #7BC8EF;
  /* hsl(200, 78%, 71%) */
}
.r1{
  background: hsl(50, 35%, 24%);
}
.r2{
  background: hsl(12, 56%, 40%);
}
.r3{
  background: hsl(355, 87%, 50%);
}
/* Preserving the Hue values turns out to be pretty good */
.z1{
  background: hsl(355, 35%, 24%);
}
.z2{
  background: hsl(355, 56%, 40%);
}
.z3{
  background: hsl(355, 87%, 50%);
}
</style>
<span class="c3"></span>
<span class="c2"></span>
<span class="c1"></span>
<span style="width: 50px;"></span>
<span class="r3"></span>
<span class="r2"></span>
<span class="r1"></span>
<span style="width: 50px;"></span>
<span class="z3"></span>
<span class="z2"></span>
<span class="z1"></span>

动态计算颜色1、2和3之间的差异真的有意义吗?如果我看你的原稿,你在做:基色,基色不太饱和,颜色更暗,然后也不太饱和,颜色也更暗

为什么不在每次变换中使用相同的公式,让用户从给定的调色板中选择一种基本颜色呢

然后,您可以为自己的测试选择32种基本颜色,并为每种颜色生成3种颜色集,以查看其效果如何

如果这样做效果不太好,那么,你可能想在谷歌上搜索颜色感知或类似的东西。如果我能正确地记住所有颜色的相同方式,我们就不会感知黑暗中的变化和其他品质


您可能还想考虑所有CSS或CSS+PHP或LASCSS或CSS+JavaScript。p> 谢谢你的反馈。当然,我可以自己做测试,但我要找的是正确的方法。此外,图像可能非常复杂,因此使用CSS、Less或Javascript不是一个选项,因为它们必须使用GD生成。