SOLVIUM

Programmierung

PHP: Bild mit Spiegeleffekt versehen - Funktion imagereflection()

Das Ergebnis

Das hier kann das Skript (ein Bild sagt ja bekanntlich mehr als tausend Worte):

vorher:
Bild spiegeln - Bsp 1-1

nachher:
Bild spiegeln - Bsp 1-2

vorher:
Bild spiegeln - Bsp 2-1

nachher:
Bild spiegeln - Bsp 2-1

Es wird also ein schicker Spiegeleffekt erzeugt (ich verbinde das immer mit der Coverübersicht in iTunes), der je nach Eingangsbild mal mehr, mal weniger spektakulär ausschaut. Frei konfigurierbar sind: Das Ausgangsbild (natürlich...), die Höhe der Reflektion, die Höhe des Schattens im oberen Teil der Reflektion und die Farbe des Hintergrundes, auf dem das Bild eingesetzt wird.

Der Code

Die Funktion ist im Prinzip ziemlich einfach aufgebaut, Schatten und Spiegeleffekt werden durch das Überlagern von immer schwächer werdenden Linien erzeugt. Für eine ordnungsgemäße Durchführung der Spiegelung ist die Funktion imageflip() nötig; eine mögliche Implementierung habe ich hier auf php.net gefunden.


<?php
     /**
      * imagereflection
      *
      * Versieht ein Bild mit einem Spiegeleffekt.
      *
      * @author  Jan Papenbrock, www.solvium.de
      * @version 0.1 (Apr-13 2007)
      *
      * @param   $source      Quellbild
      * @param   $background  Array, das die RGB-Werte der Hintergrundfarbe enthält,
      *                       wobei R = [0], G = [1], B = [2]
      * @param   $gradient    Enthält die Größe des Verlaufs, anteilig zur Bildgröße
      * @param   $shadow      Enthält die Größe des Schattens, anteilig zur Bildgröße
      *
      * @return das fertige Bild
      */

    function imagereflection $simg$background = array (255255255), $gradient 0.55$shadow 0.1 ) {
        $simgx imagesx($simg);
        $simgy imagesy($simg);
        // Höhen von Verlauf und Schatten in px bestimmen
        $gradientH round($simgy $gradient);
        $shadowH   round($simgy $shadow);
        // Zielbild erzeugen
        $dimg imagecreatetruecolor($simgx$simgy $gradientH );
        // und mit Hintergrundfarbe füllen
        imagefill($dimg00imagecolorallocate($dimg$background[0], $background[1], $background[2]));
        // Quellbild kopieren
        imagecopy($dimg$simg0000$simgx$simgy);
        // und das gespiegelte Bild einfügen
        $simg imageflip($simg1);
        imagecopy($dimg$simg0$simgy00$simgx$simgy);

        // Verlauf erzeugen
        $alphaF 60 / ($gradientH 1);
        for ($i 0$i $gradientH$i++) {
            $col imagecolorallocatealpha($dimg$background[0], $background[1], $background[2], 60 $i $alphaF);
            imageline($dimg0$simgy $i$simgx$simgy $i$col);
        }

        // Schatten erzeugen
        $alphaF 60 / ($shadowH 1);
        for ($i 0$i $shadowH$i++) {
            $col imagecolorallocatealpha($dimg160160160$i*$alphaF 67);
            imageline($dimg0$simgy $i$simgx$simgy $i$col);
        }

        // Bild zurückgeben
        return $dimg;
    }
?>

Die Benutzung

Vorausgesetzt, dass imagereflection() und imageflip() vorhanden und einsatzbereit sind, lässt sich ein beliebiges Bild auf folgende Art mit einer Reflektion versehen (dargestellt die einfachste Art, lässt sich auch in Schleifen o.ä. nutzen - wobei ich keine Laufzeit-/Belastungsanalyse gemacht habe...):


<?php
    $source      "test.png";
    $destination "test-mirror.png";
    $background = array (255255255);
    $gradient   0.55;
    $shadow     0.0;

    $simg imagecreatefrompng($source);

    $dimg imagereflection ($simg$background$gradient$shadow);

    imagepng($dimg$destination);
    imagedestroy($dimg);
?>

© 2006-2019 Solvium.de - Impressum

» Blog powered by Wordpress. Silk icons von FamFamFam.