Signatur
Beschreibung
imagerotate() dreht ein Bild um den angegebenen Winkel gegen den Uhrzeigersinn. Der Hintergrund der neu entstandenen Flächen (die durch die Rotation entstehen) wird mit der Farbe $background_color gefüllt. Das Ergebnis ist ein neues GdImage-Objekt, das Original bleibt unverändert.
Der Winkel wird in Grad angegeben; negative Werte drehen im Uhrzeigersinn. Bei Winkeln, die kein Vielfaches von 90° sind, wird das resultierende Bild größer als das Original, da die entstehenden Ecken mit der Hintergrundfarbe aufgefüllt werden.
Die Hintergrundfarbe wird typischerweise mit imagecolorallocate() oder imagecolorallocatealpha() erzeugt. Bei Bildern mit Transparenz (z. B. PNG) kann durch Verwendung von imagecolorallocatealpha() mit einem Alpha-Wert von 127 ein transparenter Hintergrund erreicht werden.
Da die Funktion Teil der GD-Bibliothek ist, muss die PHP-GD-Erweiterung installiert und aktiviert sein. Ab PHP 8.0 wird GdImage als eigener Typ verwendet; in älteren Versionen war es eine Ressource.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $image Pflicht | GdImage | Ein GD-Bildobjekt, das z. B. durch imagecreatefrompng(), imagecreatefromjpeg() oder imagecreatetruecolor() erzeugt wurde. |
|
| $angle Pflicht | float | Der Drehwinkel in Grad. Das Bild wird gegen den Uhrzeigersinn gedreht. Negative Werte drehen im Uhrzeigersinn. | |
| $background_color Pflicht | int | Farbe, mit der die durch die Rotation entstehenden leeren Bereiche gefüllt werden. Der Wert wird über imagecolorallocate() oder imagecolorallocatealpha() erzeugt. Bei Truecolor-Bildern mit Transparenz kann ein transparenter Wert (z. B. 0x7f000000 als negatve Zahl) übergeben werden. |
|
| $ignore_transparent | bool | false | Ist dieser Parameter auf true gesetzt, werden transparente Farben ignoriert (nicht als Hintergrundfarbe behandelt). Dieser Parameter wird in der Praxis kaum benötigt und ist in neueren PHP-Versionen weitgehend wirkungslos. |
Rückgabewert
GdImage-Objekt mit dem rotierten Bild zurück, oder false bei einem Fehler.Beispiele
JPEG um 45 Grad drehen (weißer Hintergrund)
<?php
// Originalbild laden
$source = imagecreatefromjpeg('foto.jpg');
// Weißen Hintergrund für die Ecken definieren
$white = imagecolorallocate($source, 255, 255, 255);
// Bild um 45 Grad gegen den Uhrzeigersinn drehen
$rotated = imagerotate($source, 45, $white);
// Ergebnis als JPEG speichern
imagejpeg($rotated, 'foto_rotiert.jpg', 90);
// Speicher freigeben
imagedestroy($source);
imagedestroy($rotated);
echo 'Bild erfolgreich um 45 Grad gedreht.';
PNG mit Transparenz um 90 Grad drehen
<?php
// Transparentes PNG laden
$source = imagecreatefrompng('logo.png');
// Alpha-Blending deaktivieren und Transparenz speichern
imagealphablending($source, false);
imagesavealpha($source, true);
// Transparente Hintergrundfarbe für die neuen Bereiche
$transparent = imagecolorallocatealpha($source, 0, 0, 0, 127);
// Bild um 90 Grad gegen den Uhrzeigersinn drehen
$rotated = imagerotate($source, 90, $transparent);
// Alpha-Blending und Transparenzspeicherung für das rotierte Bild setzen
imagealphablending($rotated, false);
imagesavealpha($rotated, true);
// Als PNG mit Transparenz speichern
imagepng($rotated, 'logo_rotiert.png');
imagedestroy($source);
imagedestroy($rotated);
echo 'PNG erfolgreich um 90 Grad mit Transparenz gedreht.';
// Wichtig · Fallstricke
Drehrichtung beachten: imagerotate() dreht gegen den Uhrzeigersinn. Um ein Bild im Uhrzeigersinn um 90° zu drehen, muss ein Winkel von -90 oder 270 übergeben werden.
Bildgröße ändert sich: Bei Winkeln, die kein Vielfaches von 90° sind, ändert sich die Bildgröße, da die Ecken mit der Hintergrundfarbe aufgefüllt werden. Das kann zu unerwartet großen Ausgabebildern führen.
Transparenz bei Truecolor-Bildern: Für transparente Hintergründe muss vor dem Speichern des rotierten Bildes imagealphablending($rotated, false) und imagesavealpha($rotated, true) gesetzt werden, da imagerotate() diese Einstellungen nicht automatisch überträgt.
Speicherverwaltung: imagerotate() erstellt ein neues Bildobjekt; das ursprüngliche Bild bleibt erhalten. Beide Bildobjekte sollten nach der Verwendung mit imagedestroy() (PHP < 8.0) oder durch Auflösung der Referenz freigegeben werden, um Speicherlecks zu vermeiden.