使用 imagecreatefromgif(), imagecreatefrompng() 或 imagecreate() 创建或载入一个基于调色板的图像资源。
调用 imagecolorclosest()
传入目标颜色的 RGB 值,函数会返回图像中最接近此颜色的调色板索引。
使用返回的颜色索引
你可以用这个索引来绘制、替换颜色,或者读取颜色信息。
<span><span><span class="hljs-comment">// 载入一张调色板图像</span></span><span>
</span><span><span class="hljs-variable">$image</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecreatefromgif</span></span><span>(</span><span><span class="hljs-string">'palette_image.gif'</span></span><span>);
</span><span><span class="hljs-comment">// 设定一个想要匹配的颜色,比如浅蓝色</span></span><span>
</span><span><span class="hljs-variable">$targetRed</span></span><span> = </span><span><span class="hljs-number">100</span></span><span>;
</span><span><span class="hljs-variable">$targetGreen</span></span><span> = </span><span><span class="hljs-number">150</span></span><span>;
</span><span><span class="hljs-variable">$targetBlue</span></span><span> = </span><span><span class="hljs-number">200</span></span><span>;
</span><span><span class="hljs-comment">// 获取最接近的颜色索引</span></span><span>
</span><span><span class="hljs-variable">$closestColorIndex</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorclosest</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$targetRed</span></span><span>, </span><span><span class="hljs-variable">$targetGreen</span></span><span>, </span><span><span class="hljs-variable">$targetBlue</span></span><span>);
</span><span><span class="hljs-comment">// 通过颜色索引获取颜色分量</span></span><span>
</span><span><span class="hljs-variable">$colors</span></span><span> = </span><span><span class="hljs-title function_ invoke__">imagecolorsforindex</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>, </span><span><span class="hljs-variable">$closestColorIndex</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"最接近的颜色索引是: "</span></span><span> . </span><span><span class="hljs-variable">$closestColorIndex</span></span><span> . </span><span><span class="hljs-string">"\n"</span></span><span>;
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"对应的颜色RGB值是: R=<span class="hljs-subst">{$colors['red']}</span></span></span><span> G=</span><span><span class="hljs-subst">{$colors['green']}</span></span><span> B=</span><span><span class="hljs-subst">{$colors['blue']}</span></span><span>\n";
</span><span><span class="hljs-comment">// 释放图像资源</span></span><span>
</span><span><span class="hljs-title function_ invoke__">imagedestroy</span></span><span>(</span><span><span class="hljs-variable">$image</span></span><span>);
</span></span>
imagecolorclosest 只适用于调色板图像,对于真彩色图像,颜色匹配的意义不大,因为真彩色图像没有固定调色板。
如果图像的颜色调色板中不存在完全匹配的颜色,函数会返回最接近的颜色索引,保证颜色差异最小。
该函数的效率较高,适合实时颜色查找需求。