Bei der Arbeit mit Bildern in PHP ist dynamisch die Farbkarten eine sehr praktische Fähigkeit. Besonders wenn wir bestimmte Farben in einem palettenbasierten Bild schnell ändern möchten, ohne das gesamte Bild neu zu zeichnen, werden ImagebildColorset () und ImageColorresolve () besonders wichtig.
In diesem Artikel werden Sie vermittelt, wie Sie diese beiden Funktionen in Verbindung mit dem Effekt der dynamischen Änderung der Bildfarbenkarte verwenden.
ImageColorset (Ressource $ Image, int $ index, int $ rot, int $ green, int $ blau, int $ alpha = 0): bool
Diese Funktion kann den Farbwert eines Farbindex in der Bildpalette direkt ändern. Das heißt, wenn ein Pixel in der Abbildung diesen Farbindex verwendet, ändert sich auch seine Farbe sofort.
ImageColorresolve (Ressource $ Image, int $ rot, int $ green, int $ blau): int int
Diese Funktion findet den Index, der der angegebenen RGB -Farbe in der Bildpalette am nächsten liegt. Wenn die genaue passende Farbe nicht gefunden wird, versucht sie, einen neuen Index zuzuweisen.
Diese beiden Funktionen können gemeinsam verwendet werden, um die Farbe zu finden, die wir zuerst ändern möchten, und dann die neue Farbe dynamisch festlegen.
Angenommen, wir haben ein einfaches Palettenbild und möchten das Originalblau vom Bild nach rot ändern.
<?php
// Erstellen Sie ein einfaches Palettenbild
$image = imagecreate(100, 100);
// Definieren Sie die anfängliche Farbe
$white = imagecolorallocate($image, 255, 255, 255); // Hintergrundfarbe:Weiß
$blue = imagecolorallocate($image, 0, 0, 255); // Farbe bürsten:Blau
// 用Blau画一个矩形
imagefilledrectangle($image, 10, 10, 90, 90, $blue);
// 动态找到Blau的Farbindex
$targetIndex = imagecolorresolve($image, 0, 0, 255);
// verwenden imagecolorset 修改Blau为Rot色
// Die Parameter sind:Bildressourcen、Farbindex、Rot、Grün、Blau、Transparenz
imagecolorset($image, $targetIndex, 255, 0, 0);
// Ausgabe Bild zum Browser
header('Content-Type: image/png');
imagepng($image);
// Freier Speicher
imagedestroy($image);
?>
Nachdem dieser Code ausgeführt wurde, werden Sie sehen, dass das ursprüngliche blaue Rechteck rot wird, was sehr seidig ist.
Diese Methode gilt nur für Palettenbilder (d. H. Palettenbasierter Bild, wie GIF oder kleine Bilder, die mit ImageCreate () ) erstellt wurden.
Für echte Farbbilder (erstellt von ImagecrreatTueColor () ) ist ImagebildColorset () ungültig.
Wenn es mehrere ähnliche, aber nicht genau die gleichen Farben im Bild gibt, sind die Farben, die mit ImageColorresolve () angezeigt werden, möglicherweise nicht das, was Sie erwartet haben. Manchmal müssen Sie die Palette des Bildes im Voraus standardisieren.
Wenn Sie beispielsweise eine Webseitenfunktion entwickeln möchten, können Benutzer auf die Schaltfläche klicken, um die Farbe des Bildes dynamisch zu ändern, und Sie können die obige Lösung verwenden, um sie mit einem einfachen Formular zum Senden zu kombinieren. Zum Beispiel:
<form method="post" action="https://m66.net/change_color.php">
<input type="submit" name="change" value="Ändern Sie die Farbe!">
</form>
Verwenden Sie dann das Skript gerade, um das Bild zu verarbeiten, um den Effekt einer dynamischen Farbänderung zu erreichen.
Durch Kombinieren von Bildfarben Resolve (), um den Zielfarbenindex zu finden, und dann im ImageColorset () den entsprechenden Farbwert zu ändern, ist es sehr bequem, den dynamischen Bildfarbersatz zu realisieren. Diese Technologie eignet sich besonders für den Einsatz, wenn es notwendig ist, den festen Farbbereich schnell zu ändern, z. B. Spielkarten, dynamische Symbolanpassung und andere Szenarien.
Wenn Ihr Projekt eine große Anzahl dynamischer Bilder verarbeiten muss, wird empfohlen, es mit fortschrittlicheren Bildverarbeitungsbibliotheken wie GD oder Imagick für leistungsfähigere Funktionen zu verwenden.