Start · Sprachen · PHP · Referenz · imageflip

imageflip

Funktion

Spiegelt ein GD-Bild horizontal, vertikal oder in beide Richtungen gleichzeitig anhand eines angegebenen Modus.

seit PHP 5.5.0 Kategorie: image

Signatur

imageflip(GdImage $image, int $mode): bool

Beschreibung

imageflip() spiegelt ein GD-Bildobjekt in-place, also direkt auf der übergebenen Bildressource. Es wird kein neues Bild erzeugt – das Original wird verändert. Die Funktion eignet sich für alle Fälle, in denen ein Bild vor der Ausgabe oder Weiterverarbeitung gespiegelt werden soll, etwa zur Darstellung von Wasserzeichen, Thumbnails oder Foto-Effekten.

Der Parameter mode steuert die Spiegelachse. PHP stellt dafür drei Konstanten bereit: IMG_FLIP_HORIZONTAL (links/rechts), IMG_FLIP_VERTICAL (oben/unten) und IMG_FLIP_BOTH (beides gleichzeitig, entspricht einer 180°-Drehung um den Mittelpunkt).

Die Funktion arbeitet mit allen GD-Bildtypen (True-Color und Paletten-Bilder) und gibt true bei Erfolg zurück. Vor PHP 8.0 wurde statt GdImage ein älterer Ressource-Typ verwendet, das Verhalten ist jedoch gleich.

Parameter

Name Typ Default Beschreibung
$image Pflicht GdImage Ein GD-Bildobjekt, das zuvor mit Funktionen wie imagecreatetruecolor(), imagecreatefromjpeg() o. ä. erzeugt wurde.
$mode Pflicht int Gibt die Spiegelachse an. Mögliche Werte: IMG_FLIP_HORIZONTAL (horizontale Spiegelung), IMG_FLIP_VERTICAL (vertikale Spiegelung), IMG_FLIP_BOTH (beide Achsen gleichzeitig).

Rückgabewert

Typ
bool
Beschreibung
Gibt true bei Erfolg zurück, false bei einem Fehler (z. B. ungültiger Modus).

Beispiele

JPEG-Bild horizontal spiegeln und als neue Datei speichern

<?php
// Originalbild laden
$image = imagecreatefromjpeg('foto.jpg');

if ($image === false) {
    die('Bild konnte nicht geladen werden.');
}

// Horizontal spiegeln (links ↔ rechts)
imageflip($image, IMG_FLIP_HORIZONTAL);

// Gespiegeltes Bild speichern
imagejpeg($image, 'foto_gespiegelt.jpg', 90);
imagedestroy($image);

echo 'Bild erfolgreich horizontal gespiegelt und gespeichert.';
Bild erfolgreich horizontal gespiegelt und gespeichert.

Bild in beide Richtungen spiegeln und als PNG ausgeben

<?php
// PNG laden
$image = imagecreatefrompng('logo.png');

if ($image === false) {
    die('Bild konnte nicht geladen werden.');
}

// In beide Richtungen spiegeln (entspricht 180°-Drehung)
imageflip($image, IMG_FLIP_BOTH);

// Direkt als PNG an den Browser ausgeben
header('Content-Type: image/png');
imagepng($image);
imagedestroy($image);

Vergleich aller drei Flip-Modi auf einem erzeugten Testbild

<?php
function createTestImage(): GdImage {
    $img = imagecreatetruecolor(100, 50);
    $white = imagecolorallocate($img, 255, 255, 255);
    $red   = imagecolorallocate($img, 255, 0, 0);
    imagefilledrectangle($img, 0, 0, 100, 50, $white);
    // Rotes Dreieck oben links als Markierung
    imagefilledpolygon($img, [0, 0, 30, 0, 0, 30], $red);
    return $img;
}

$modes = [
    IMG_FLIP_HORIZONTAL => 'Horizontal',
    IMG_FLIP_VERTICAL   => 'Vertikal',
    IMG_FLIP_BOTH       => 'Beide',
];

foreach ($modes as $mode => $label) {
    $img = createTestImage();
    imageflip($img, $mode);
    imagepng($img, "test_flip_{$label}.png");
    imagedestroy($img);
    echo "Modus '{$label}' gespeichert.\n";
}
Modus 'Horizontal' gespeichert. Modus 'Vertikal' gespeichert. Modus 'Beide' gespeichert.

// Wichtig · Fallstricke

In-place-Änderung: imageflip() verändert das übergebene Bildobjekt direkt. Soll das Original erhalten bleiben, muss vorher eine Kopie mit imagecopy() oder imagecreatetruecolor() plus imagecopy() angelegt werden.

Kompatibilität: Ab PHP 8.0 ersetzt der Typ GdImage den zuvor verwendeten resource-Typ. Code, der noch resource prüft (z. B. is_resource($image)), sollte auf $image instanceof GdImage umgestellt werden.

Alternativen vor PHP 5.5: Vor Einführung von imageflip() musste die Spiegelung manuell über imagerotate() (nur 180°) oder pixel-weises Kopieren realisiert werden.