CakeFest 2024: The Official CakePHP Conference

imagecolorresolve

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

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

Beschreibung

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

Diese Funktion gibt garantiert einen Farbindex für die angegebenen Farbe zurück, entweder den exakten oder den nächstmöglichen Wert.

Wenn das Bild aus einer Datei erzeugt wurde, 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 gültige gd-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($im, 255, 255, 255);
$colors[] = imagecolorresolve($im, 0, 0, 200);

// 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 Index der Farbe, die der angegebenen Farbe am nächsten kommt
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