imagecolorresolve

(PHP 4, PHP 5, PHP 7)

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

Red 컴포넌트 값.

green

Green 컴포넌트 값.

blue

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