PHP Conference Japan 2024

imagecolorresolve

(PHP 4, PHP 5, PHP 7, PHP 8)

imagecolorresolve获取指定颜色的索引或其最接近的替代颜色

描述

imagecolorresolve(
    GdImage $image,
    int $red,
    int $green,
    int $blue
): int

此函数保证返回请求颜色的颜色索引,或者是精确的颜色,或者是其最接近的替代颜色。

如果您从文件创建图像,则仅解析图像中使用的颜色。仅存在于调色板中的颜色不会被解析。

参数

image

一个 GdImage 对象,由图像创建函数之一返回,例如 imagecreatetruecolor()

red

红色分量的值。

green

绿色分量的值。

blue

蓝色分量的值。

返回值

返回颜色索引。

变更日志

版本 描述
8.0.0 image 现在期望一个 GdImage 实例;以前,期望一个有效的 gd resource

范例

示例 #1 使用 imagecoloresolve() 从图像获取颜色

<?php
// 加载图像
$im = imagecreatefromgif('phplogo.gif');

// 从图像获取最接近的颜色
$colors = array();
$colors[] = imagecolorresolve($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200);

// 输出
print_r($colors);

imagedestroy($im);
?>

以上示例将输出类似以下内容

Array
(
    [0] => 89
    [1] => 85
)

参见

添加注释

用户贡献的注释 1 条注释

1
ceo at l-i-e dot com
22 年前
好的,所以有时获得所需的精确颜色非常重要,只是它不在图像中,而 ImageColorResolve 的“接近程度”不够。

以下代码是一个非常糟糕的技巧,速度很慢,但它确实做到了。

$colorcount = array();
for ($x = 0; $x < $width; $x++){
for ($y = 0; $y < $height; $y++){
$colorindex = imagecolorat($jpg, $x, $y);
if (!isset($colorcount[$colorindex])){
$colorcount[$colorindex] = 1;
}
else{
$colorcount[$colorindex]++;
}
}
}
asort($colorcount);
reset($colorcount);

$black = imagecolorexact($jpg, 0, 0, 0);
if ($black == -1){
$goner = key($colorcount);
$rgb = imagecolorsforindex($jpg, $goner);
#error_log("Need black: About to kill $goner ($rgb[red], $rgb[green], $rgb[blue]) which was only used in $colorcount[$goner] pixels", 0);
unset($colorcount[$goner]);
imagecolordeallocate($jpg, $goner);
$black = imagecolorallocate($jpg, 0, 0, 0);
}
if ($black == -1){
$black = imagecolorresolve($jpg, 0, 0, 0);
#error_log("Damn! STILL couldn't allocate the color!", 0);
}
To Top