Start · Sprachen · PHP · Referenz · imagecolormatch

imagecolormatch

Funktion

Passt die Palettenfarben eines Bildes an die Farben der Echtfarbenversion desselben Bildes an, um visuelle Unterschiede zu minimieren.

seit PHP 4.3.0 Kategorie: image

Signatur

imagecolormatch(GdImage $image1, GdImage $image2): bool

Beschreibung

imagecolormatch() gleicht die Palette eines palettenbasierten Bildes (8-Bit, z. B. GIF oder PNG mit Palette) an die Farben eines Echtfarbenbildes (True-Color) an. Dabei wird für jede Palettenfarbe in $image2 die am besten passende Farbe aus der Echtfarbenversion $image1 gesucht und die Palette entsprechend aktualisiert.

Diese Funktion ist besonders nützlich, wenn ein True-Color-Bild zuvor mit imagetruecolortopalette() in ein Palettenbild umgewandelt wurde und anschließend eine optimale Farbannäherung gewünscht wird. Durch den Einsatz von imagecolormatch() lässt sich die visuelle Qualität des konvertierten Bildes deutlich verbessern, da die Palette besser auf die tatsächlich im Original vorhandenen Farben abgestimmt wird.

Beide Bilder müssen die gleichen Dimensionen (Breite und Höhe) aufweisen. $image1 muss ein True-Color-Bild sein, $image2 muss ein Palettenbild sein. Ist eine dieser Bedingungen nicht erfüllt, gibt die Funktion false zurück.

Parameter

Name Typ Default Beschreibung
$image1 Pflicht GdImage Ein True-Color-GD-Bildobjekt, das als Referenz für die Farbanpassung dient. Muss die gleiche Größe wie image2 haben.
$image2 Pflicht GdImage Ein palettenbasiertes GD-Bildobjekt, dessen Palette an die Farben von image1 angepasst wird. Muss die gleiche Größe wie image1 haben.

Rückgabewert

Typ
bool
Beschreibung
Gibt true zurück, wenn die Farbanpassung erfolgreich war. Gibt false zurück, wenn die Bilder unterschiedliche Dimensionen haben, image1 kein True-Color-Bild ist oder image2 kein Palettenbild ist.

Beispiele

True-Color-Bild in Palettenbild umwandeln und Farben angleichen

<?php
// Ursprüngliches True-Color-Bild laden
$trueColor = imagecreatefromjpeg('foto.jpg');

// Kopie erzeugen und in Palettenbild umwandeln (256 Farben)
$palette = imagecreatetruecolor(imagesx($trueColor), imagesy($trueColor));
imagecopy($palette, $trueColor, 0, 0, 0, 0, imagesx($trueColor), imagesy($trueColor));
imagetruecolortopalette($palette, true, 256);

// Palettenfarben an das Original-True-Color-Bild anpassen
if (imagecolormatch($trueColor, $palette)) {
    echo 'Farbanpassung erfolgreich.';
    imagepng($palette, 'foto_palette.png');
} else {
    echo 'Farbanpassung fehlgeschlagen.';
}

imagedestroy($trueColor);
imagedestroy($palette);
?>
Farbanpassung erfolgreich.

Fehlerfall: Bilder haben unterschiedliche Dimensionen

<?php
// True-Color-Bild (200x100)
$trueColor = imagecreatetruecolor(200, 100);

// Palettenbild mit abweichenden Maßen (100x50)
$palette = imagecreate(100, 50);

$result = imagecolormatch($trueColor, $palette);
var_dump($result); // bool(false) — Dimensionen stimmen nicht überein

imagedestroy($trueColor);
imagedestroy($palette);
?>
bool(false)

// Wichtig · Fallstricke

Voraussetzungen: image1 muss zwingend ein True-Color-Bild und image2 zwingend ein Palettenbild sein – andernfalls schlägt die Funktion fehl. Die Funktion gibt in diesem Fall false zurück, wirft jedoch keine Exception.

Typischer Workflow: Zunächst das Original als True-Color-Bild laden, dann eine Kopie mit imagetruecolortopalette() in ein Palettenbild umwandeln und abschließend imagecolormatch() aufrufen, um die Palette zu optimieren. Ohne diesen Schritt können Palettenbilder farblich stark vom Original abweichen.

Ab PHP 8.0 erwartet die Funktion GdImage-Objekte anstelle von Ressourcen (resource).