Start · Sprachen · PHP · Referenz · imageaffinematrixget

imageaffinematrixget

Funktion

Gibt eine vordefinierte affine Transformationsmatrix für GD-Bildoperationen zurück.

seit PHP 5.5.0 Kategorie: image

Signatur

imageaffinematrixget(int $type, array|float $options = []): array|false

Beschreibung

imageaffinematrixget() erzeugt eine affine Transformationsmatrix, die anschließend mit imageaffine() auf ein GD-Bild angewendet werden kann. Affine Transformationen ermöglichen geometrische Operationen wie Skalierung, Rotation, Translation und Scherung, ohne das ursprüngliche Bild direkt zu verändern.

Der Parameter type bestimmt, welche Art von Transformation berechnet werden soll. Dafür stehen die vordefinierten Konstanten IMG_AFFINE_TRANSLATE, IMG_AFFINE_SCALE, IMG_AFFINE_ROTATE, IMG_AFFINE_SHEAR_HORIZONTAL und IMG_AFFINE_SHEAR_VERTICAL zur Verfügung. Je nach gewähltem Typ erwartet $options entweder ein Array mit bestimmten Schlüsseln oder einen einzelnen Float-Wert.

Die zurückgegebene Matrix ist ein Array mit sechs Float-Werten ([a, b, c, d, tx, ty]), das eine 2D-Transformationsmatrix im Format für imageaffine() repräsentiert. Mehrere Matrizen können mit imageaffinematrixconcat() kombiniert werden, um verkettete Transformationen effizient anzuwenden.

Diese Funktion ist besonders nützlich, wenn komplexe Bildtransformationen auf Basis mathematischer Transformationsmatrizen durchgeführt werden sollen, ohne die Rohe Matrix manuell berechnen zu müssen.

Parameter

Name Typ Default Beschreibung
$type Pflicht int Art der affinen Transformation. Mögliche Werte sind die Konstanten IMG_AFFINE_TRANSLATE, IMG_AFFINE_SCALE, IMG_AFFINE_ROTATE, IMG_AFFINE_SHEAR_HORIZONTAL und IMG_AFFINE_SHEAR_VERTICAL.
$options array|float [] Optionen abhängig vom gewählten type: Für IMG_AFFINE_TRANSLATE und IMG_AFFINE_SCALE ein Array mit den Schlüsseln x und y (Float-Werte). Für IMG_AFFINE_ROTATE, IMG_AFFINE_SHEAR_HORIZONTAL und IMG_AFFINE_SHEAR_VERTICAL ein einzelner Float-Wert (Winkel in Grad bzw. Scherungsfaktor).

Rückgabewert

Typ
array|false
Beschreibung
Gibt bei Erfolg ein Array mit sechs Float-Werten zurück, das die affine Transformationsmatrix in der Form [a, b, c, d, tx, ty] repräsentiert. Bei einem Fehler (z. B. ungültigem type oder falschen options) wird false zurückgegeben.

Beispiele

Bild um 45 Grad rotieren

<?php
// Originalbild laden
$image = imagecreatefrompng('beispiel.png');

// Rotationsmatrix für 45 Grad erzeugen
$matrix = imageaffinematrixget(IMG_AFFINE_ROTATE, 45.0);

if ($matrix === false) {
    die('Fehler beim Erzeugen der Matrix');
}

// Matrix auf das Bild anwenden
$rotiert = imageaffine($image, $matrix);

// Ergebnis speichern
imagepng($rotiert, 'rotiert.png');

imagedestroy($image);
imagedestroy($rotiert);

echo 'Matrix: ';
print_r($matrix);
Matrix: Array ( [0] => 0.70710678118655 [1] => 0.70710678118655 [2] => -0.70710678118655 [3] => 0.70710678118655 [4] => 0 [5] => 0 )

Bild skalieren und verschieben (verkettete Transformation)

<?php
$image = imagecreatefrompng('beispiel.png');

// Skalierungsmatrix: Breite x2, Höhe x2
$matrixScale = imageaffinematrixget(IMG_AFFINE_SCALE, ['x' => 2.0, 'y' => 2.0]);

// Translationsmatrix: 50 Pixel nach rechts, 30 Pixel nach unten
$matrixTranslate = imageaffinematrixget(IMG_AFFINE_TRANSLATE, ['x' => 50.0, 'y' => 30.0]);

// Matrizen kombinieren
$matrixKombiniert = imageaffinematrixconcat($matrixScale, $matrixTranslate);

// Kombinierte Transformation anwenden
$ergebnis = imageaffine($image, $matrixKombiniert);

imagepng($ergebnis, 'skaliert_und_verschoben.png');

imagedestroy($image);
imagedestroy($ergebnis);

echo 'Transformation erfolgreich angewendet.';
Transformation erfolgreich angewendet.

// Wichtig · Fallstricke

Winkelangabe bei Rotation: Der Winkel für IMG_AFFINE_ROTATE wird in Grad (nicht Radiant) angegeben. Positive Werte rotieren das Bild im Uhrzeigersinn.

GD-Erweiterung erforderlich: Diese Funktion benötigt die GD-Erweiterung von PHP. Ohne GD ist sie nicht verfügbar. Die Verfügbarkeit kann mit extension_loaded('gd') geprüft werden.

Rückgabe prüfen: Da die Funktion bei ungültigen Parametern false zurückgibt, sollte der Rückgabewert stets mit === false geprüft werden, bevor die Matrix weiterverwendet wird.