imagecolorresolve

(PHP 4, PHP 5)

imagecolorresolveGet the index of the specified color or its closest possible alternative

說明

int imagecolorresolve ( resource $image , int $red , int $green , int $blue )

This function is guaranteed to return a color index for a requested color, either the exact color or the closest possible alternative.

如果影像由檔案建立,只有該影像使用到的顏色會被解析。僅存在於調色盤中的顏色不會被解析。

參數

image

由影像建立函式(例如imagecreatetruecolor())回傳的影像資源。

red

紅色成分的值。

green

綠色成分的值。

blue

藍色成分的值。

回傳值

Returns a color index.

範例

Example #1 Using imagecoloresolve() to get colors from an image

<?php
// Load an image
$im imagecreatefromgif('phplogo.gif');

// Get closest colors from the image
$colors = array();
$colors[] = imagecolorresolve($im255255255);
$colors[] = imagecolorresolve($im00200);

// Output
print_r($colors);

imagedestroy($im);
?>

上例的輸出類似於:

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

參見

add a note add a note

User Contributed Notes 1 note

up
-1
ceo at l-i-e dot com
22 years ago
Okay, so sometimes it's really IMPORTANT to get the exact color you want, only it's not *IN* the Image, and ImageColorResolve just isn't "close enough".

The following code is a disgustingly gross hack, rather slow, but it does that.

$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