Aktueller Standort: Startseite> Neueste Artikel> ImageColorresolve () Verhaltensunterschied in 24-Bit- und 8-Bit-Bildern

ImageColorresolve () Verhaltensunterschied in 24-Bit- und 8-Bit-Bildern

M66 2025-05-29

Bei der Verwendung von PHP für die Bildverarbeitung erscheint die Funktion imageColorresolve () häufig in Szenen, die Palettenbilder verarbeiten. Wenn viele Entwickler diese Funktion verwenden, fragen sie sich oft: ** Was ist der Unterschied in ihrem Verhalten in 24-Bit-Bildern (Truecolor) und 8-Bit-Bildern (Palette)? ** Heute werden wir eingehend über dieses Problem sprechen.

Was ist ImageColorresolve () ?

Lassen Sie uns zunächst kurz vorstellen, dass ImageColorresolve () . Die Funktion dieser Funktion ist:
Finden Sie, wenn die angegebene Farbe bereits in einem Palettenbild vorhanden ist. Wenn es existiert, geben Sie den Farbindex zurück. Wenn es nicht existiert, versucht es, diese Farbe der Palette hinzuzufügen, und gibt einen neuen Index zurück.

Basisnutzungsbeispiele:

 <?php
// Erstellen Sie ein Bild 8 Bit Palette Bild
$image = imagecreate(100, 100);

// Definition von Rot
$red = imagecolorresolve($image, 255, 0, 0);

// Zeichnen Sie ein Rechteck mit dieser Farbe
imagefilledrectangle($image, 10, 10, 90, 90, $red);

// Ausgabebild
header('Content-Type: image/png');
imagepng($image);

// Ressourcen zerstören
imagedestroy($image);
?>

Wenn hier bereits Rot in der Palette existiert, gibt ImageColorresolve () den vorhandenen Farbindex zurück. Andernfalls fügt es automatisch Rot zur Palette hinzu.

24-Bit-Verhalten (Truecolor) in einem Bild

Wenn Sie ein 24-Bit-Truecolor- Bild mit ImageCrreatetruecolor () erstellen, hat das Bild selbst keine Palette . Jedes Pixel kann RGB -Farbwerte unabhängig speichern.

Die Frage ist also: Was passiert, wenn Sie ImageColorresolve () auf Truecolor -Bild nennen?

Die Antwort lautet:
Auch wenn Sie ImageColorresolve () aufrufen, schaut PHP nicht wirklich nach oder fügt Farbindizes hinzu, gibt jedoch eine Ganzzahl zurück, die aus RGB -Werten berechnet wird (d. H. Farbidentifikation).

Zum Beispiel:

 <?php
// Erstellen Sie ein Bild 24 Bisschen TrueColor Bild
$image = imagecreatetruecolor(100, 100);

// Blau definieren
$blue = imagecolorresolve($image, 0, 0, 255);

// Zeichnen Sie ein Rechteck mit dieser Farbe
imagefilledrectangle($image, 10, 10, 90, 90, $blue);

// Ausgabebild
header('Content-Type: image/png');
imagepng($image);

imagedestroy($image);
?>

Hier ist $ Blue eine Ganzzahl (z. B. 255 ), kein Farbindex. In diesem Modus müssen Sie sich nicht einmal um die Existenz der Farbe kümmern, da jedes Pixel die vollständigen RGB -Informationen separat speichern kann.

8-Bit (Farbpalette) Verhalten in Bildern

In einem 8-Bit-Bild (erstellt von Imagecreate () ) sind die Farben des Bildes begrenzt, mit höchstens 256 Farben.

Daher wird PHP: Wenn ImageColorresolve () aufgerufen wird, wird er:

  1. Durch die gesamte Farbpalette iterieren, um festzustellen, ob die angegebene Farbe bereits vorhanden ist.

  2. Wenn vorhanden, geben Sie seinen Index zurück.

  3. Wenn nicht vorhanden, fügen Sie der Palette hinzu (wenn der Platz ausreicht).

  4. Wenn die Palette voll ist, geben Sie den Index der vorhandenen Farbe zurück, die der angegebenen Farbe am nächsten liegt.

Dies ist auch der Grund, warum 8 -Bit -Bilder bei der Verarbeitung komplexer Bilder manchmal anfällig für Farbverzerrungen sind - da die Farben "ungefähr" sind.

Beispiel:

 <?php
$image = imagecreate(100, 100);

// Fügen Sie Farben hinzu, die die Palettenlimit überschreiten
for ($i = 0; $i < 300; $i++) {
    $color = imagecolorresolve($image, rand(0,255), rand(0,255), rand(0,255));
}

// Ein Bild erstellen,Zum Betrachten
header('Content-Type: image/png');
imagepng($image);

// Ressourcenveröffentlichung
imagedestroy($image);
?>

Obwohl im obigen Code 300 verschiedene Farben hinzugefügt wurden, werden im Bild nur bis zu 256 Farben enthalten, und der Überschuss wird "ungefähr übereinstimmen".

Zusammenfassung

Bildtyp ImageColorresolve () Verhaltensbeschreibung
24-Bit-Truecolor Gibt einen Farbwert (int) zurück, ohne eine Palette zu verwenden
8-Bit-Farbpalette Bild Finden oder hinzufügen Farbindizes, begrenzt auf 256 Farben

Um zusammenzufassen:

  • In 24-Bit-Bildern ist ImageColorresolve () nicht so notwendig. Sie können ImagesColorAlleCocate () direkt verwenden oder die Farbe selbst konstruieren.

  • In 8-Bit-Bildern ist es sehr wichtig, insbesondere wenn Sie die Anzahl und Verteilung der Bildfarbe steuern müssen.

Tipps

Wenn Sie bei der Verarbeitung von 8-Bit-Bildern häufig auf Farbmangel stoßen, können Sie vor dem Erzeugen des Bildes imageCrreatTueColor () in Betracht ziehen und das Truecolor-Bild dann mithilfe von ImageTeColortopalette () in ein Palettenbild konvertieren. PHP optimiert automatisch die Farbe.

Beispielcode -Referenz: