SymfonyCon Disneyland Paris 2022

imagecolorresolve

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

imagecolorresolve Ermittelt den Index-Wert der angegebenen Farbe oder die nächst mögliche Alternative dazu

Beschreibung

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

Diese Funktion ermittelt garantiert einen Farb-Index zu der angegebenen Farbe, nämlich entweder den exakten oder den nächst möglichen Wert.

Wenn Sie das Bild aus einer Datei erzeugt haben, so werden nur die Farben aufgelöst, die im Bild verwendet werden. Farben die nur in der Farbpalette enthalten sind werden nicht aufgelöst.

Parameter-Liste

image

Ein GdImage-Objekt, das von einer der Funktionen zur Bilderzeugung, z. B. imagecreatetruecolor(), zurückgegeben wurde.

red

Wert der Rotkomponente.

green

Wert der Grünkomponente.

blue

Wert der Blaukomponente.

Rückgabewerte

Gibt einen Farbindex zurück.

Changelog

Version Beschreibung
8.0.0 image erwartet nun eine GdImage-Instanz; vorher wurde eine Ressource erwartet.

Beispiele

Beispiel #1 Verwendung von imagecoloresolve() um Farben aus einem Bild auszulesen

<?php
// Lade ein Bild
$im imagecreatefromgif('phplogo.gif');

// Ermittle die nächstgelegenen Farben des Bildes
$colors = array();
$colors[] = imagecolorresolve($im255255255);
$colors[] = imagecolorresolve($im00200);

// Output
print_r($colors);

imagedestroy($im);
?>

Das oben gezeigte Beispiel erzeugt eine ähnliche Ausgabe wie:

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

Siehe auch

  • imagecolorclosest() - Ermittelt den Farbwert-Index, der den angegebenen Farben am nächsten liegt
add a note

User Contributed Notes 1 note

up
-1
ceo at l-i-e dot com
20 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