Signatur
Beschreibung
imageaffinematrixconcat() kombiniert zwei affine Transformationsmatrizen durch Matrizenmultiplikation zu einer neuen Matrix. Das Ergebnis entspricht der sequenziellen Anwendung beider Transformationen: Zuerst $matrix1, dann $matrix2.
Affine Transformationsmatrizen in GD werden als Array mit sechs Elementen (Indizes 0–5) repräsentiert und beschreiben lineare Transformationen wie Skalierung, Rotation, Scherung und Translation. Durch das Verketten mehrerer Matrizen können komplexe Transformationen zu einer einzigen zusammengefasst werden, was die Berechnung vereinfacht und Performance spart.
Typisch wird diese Funktion zusammen mit imageaffinematrixget() und imageaffine() verwendet: Zuerst werden einzelne Matrizen für Rotation, Skalierung etc. erzeugt, dann per imageaffinematrixconcat() kombiniert und schließlich auf ein Bild angewendet.
- Beide Matrizen müssen jeweils genau sechs numerische Einträge (Indizes 0–5) besitzen.
- Das Ergebnis-Array hat ebenfalls sechs Einträge und kann direkt an
imageaffine()übergeben werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $matrix1 Pflicht | array | Erste affine Transformationsmatrix als Array mit sechs numerischen Elementen (Indizes 0–5). | |
| $matrix2 Pflicht | array | Zweite affine Transformationsmatrix als Array mit sechs numerischen Elementen (Indizes 0–5), die nach $matrix1 angewendet wird. |
Rückgabewert
false zurückgegeben.Beispiele
Rotation und Skalierung kombinieren
<?php
// Ausgangsbild erstellen
$src = imagecreatetruecolor(200, 200);
$blau = imagecolorallocate($src, 0, 100, 200);
imagefilledrectangle($src, 50, 50, 150, 150, $blau);
// Matrix für 30-Grad-Rotation
$rotMatrix = imageaffinematrixget(IMG_AFFINE_ROTATE, 30);
// Matrix für Skalierung um Faktor 0.8
$scaleMatrix = imageaffinematrixget(IMG_AFFINE_SCALE, ['x' => 0.8, 'y' => 0.8]);
// Beide Matrizen verketten
$combined = imageaffinematrixconcat($rotMatrix, $scaleMatrix);
if ($combined !== false) {
// Kombinierte Transformation auf das Bild anwenden
$dst = imageaffine($src, $combined);
imagepng($dst, 'transformiert.png');
imagedestroy($dst);
}
imagedestroy($src);
echo "Transformiertes Bild gespeichert.";
Drei Transformationen zu einer verketten
<?php
// Matrix für horizontale Scherung
$shearMatrix = imageaffinematrixget(IMG_AFFINE_SHEAR_HORIZONTAL, 0.2);
// Matrix für 45-Grad-Rotation
$rotMatrix = imageaffinematrixget(IMG_AFFINE_ROTATE, 45);
// Matrix für Translation
$transMatrix = imageaffinematrixget(IMG_AFFINE_TRANSLATE, ['x' => 20, 'y' => 10]);
// Alle drei Matrizen schrittweise verketten
$step1 = imageaffinematrixconcat($shearMatrix, $rotMatrix);
$finalMatrix = imageaffinematrixconcat($step1, $transMatrix);
var_dump($finalMatrix);
// Wichtig · Fallstricke
Reihenfolge beachten: Die Matrizenmultiplikation ist nicht kommutativ. imageaffinematrixconcat($a, $b) liefert ein anderes Ergebnis als imageaffinematrixconcat($b, $a). Die Transformationen werden in der Reihenfolge $matrix1 zuerst, dann $matrix2 angewendet.
Beide übergebenen Arrays müssen genau sechs numerische Werte an den Indizes 0 bis 5 enthalten. Fehlen Einträge oder sind sie nicht numerisch, gibt die Funktion false zurück. Verwende stets imageaffinematrixget() zur sicheren Erzeugung valider Matrizen.
Diese Funktion gehört zur GD-Erweiterung und erfordert PHP 5.5 oder neuer mit aktiviertem GD.