imagecolorresolve

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

imagecolorresolve β€” ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΠΊΠ°Ρ‚ΠΎΡ€ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠ³ΠΎ Ρ†Π²Π΅Ρ‚Π° ΠΈΠ»ΠΈ Π΅Π³ΠΎ блиТайший Π°Π½Π°Π»ΠΎΠ³

ОписаниС

function 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);

?>

Π’Ρ‹Π²ΠΎΠ΄ ΠΏΡ€ΠΈΠ²Π΅Π΄Ρ‘Π½Π½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΡ…ΠΎΠΆ Π½Π°:

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

Π‘ΠΌΠΎΡ‚Ρ€ΠΈΡ‚Π΅ Ρ‚Π°ΠΊΠΆΠ΅

  • imagecolorclosest() - ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ блиТайший индСкс Ρ†Π²Π΅Ρ‚Π°
οΌ‹Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ

ΠŸΡ€ΠΈΠΌΠ΅Ρ‡Π°Π½ΠΈΡ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ 1 note

up
1
ceo at l-i-e dot com ΒΆ
24 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);
}