Php GD颜色替换

Php GD颜色替换,php,gd,Php,Gd,这简直要了我的命 图像背景为纯红色,前景为纯灰色。在前景的边缘有一些从灰色到白色的抗锯齿 我需要做的是将前景颜色更改为用户指定的颜色,将红色更改为透明。使用ImageColorCloser+imagecolorset/imagecolortransparent很容易做到这一点。问题在于防松弛部分 我认为我需要在图像中循环像素。这似乎是可行的: 我相信我现在需要确定前景色和抗锯齿色之间的色差 所以 前景色=rgb(153、153、153) 抗混叠像素=rgb(173173173) 新颜色=rgb(

这简直要了我的命

图像背景为纯红色,前景为纯灰色。在前景的边缘有一些从灰色到白色的抗锯齿

我需要做的是将前景颜色更改为用户指定的颜色,将红色更改为透明。使用ImageColorCloser+imagecolorset/imagecolortransparent很容易做到这一点。问题在于防松弛部分

我认为我需要在图像中循环像素。这似乎是可行的:

我相信我现在需要确定前景色和抗锯齿色之间的色差

所以

前景色=rgb(153、153、153)

抗混叠像素=rgb(173173173)

新颜色=rgb(0,0,255)


如何确定AA像素和前景颜色之间的颜色差异,然后将其应用于新颜色?编辑:结果表明这与因素有关

反别名值应为相同的因子,因此

<?

   //old foreground colour
   $of = array (220, 220, 220);
   //old anti alias colour
   $oaa = array (110, 110, 110);

   //factors
   $factors = array ($of[0]/$oaa[0], $of[1]/$oaa[1], $of[2]/$oaa[2]);

   //new foreground
   $nf = array (156, 34, 34);
   //new anti alias
   $naa = array($nf[0]/$factors[0], $nf[1]/$factors[1], $nf[2]/$factors[2]);

?>


这是我最初的想法,但我认为这是不正确的。如果新的前景色是0,0,255。你最终会得到20,20,255,这将是一个完全不同的颜色。尝试新的答案,玩photoshop,这似乎是正确的