Antworten auf deine Fragen:
Neues Thema erstellen

PHP-Skript "Reflections" - Farbe auf weiß umstellen

pusher23

Noch nicht viel geschrieben

Grüß euch,

ich habe ein PHP-Skript welches für eine Javascript-Bilder-Slideshow Spiegeleffekte erzeugt.
Das ganze sieht so aus:


Meine Frage:
Was muss ich im PHP-Skript umschreiben damit das Spiegelbild statt auf schwarz auf weiß verläuft?

Ich habe schon einiges probiert, u.a. bei bgc die Werte von 0 0 0 auf 255 255 255 umgestellt - leider ohne Erfolg.
Wär nett wenn mir jemand helfen könnte, ich kann nämlich kein PHP, aber rein theoretisch müsste das doch einfach zu lösen sein? Oder irre ich mich?

PHP:
<?php
    /*
        ----------------------------------------------------------------
        Easy Reflections by Richard Davey, Core PHP (rich@corephp.co.uk)
        v2 - 2nd March 2007
        Updates include changes by Monte Ohrt (monte@ohrt.com)
        ----------------------------------------------------------------
        You are free to use this in any product, or on any web site.
        Latest builds at: http://reflection.corephp.co.uk
        ----------------------------------------------------------------
        
        This script accepts the following $_GET parameters:
        
        img                required    The source image (to reflect)
        height            optional    Height of the reflection (% or pixel value)
        bgc                optional    Background colour to fade into, default = #000000
        fade_start      optional    Start the alpha fade from whch value? (% value)
        fade_end        optional    End the alpha fade from whch value? (% value)
        jpeg            optional    Output will be JPEG at 'param' quality (default 80)
        cache           optional    Save reflection image to the cache? (boolean)
    */
    
    // Replace special chars to be HTML-Code
    function stringToHTML($string)
    {
        $array_search = array('é', 'è', 'ë', 'ê', 'à', 'ä', 'Ä', 'â', 'ù', 'ü', 'Ü', 'û', 'ö', 'Ö', 'ô', 'ï', 'î');
        $array_replace = array('&eacute;', '&egrave;',    '&euml;', '&ecirc;', '&agrave;', '&auml;', '&Auml;', '&acirc;', '&ugrave;', '&uuml;', '&Uuml;', '&ucirc;', '&ouml;', '&Ouml;', '&ocirc;', '&iuml;', '&icirc;');
        $string_return = str_replace($array_search, $array_replace, $string);
        return $string_return;
    }

    //    PHP Version sanity check
    if (version_compare('4.3.2', phpversion()) == 1)
    {
        echo 'This version of PHP is not fully supported. You need 4.3.2 or above.';
        exit();
    }
    
    //    GD check
    if (extension_loaded('gd') == false && !dl('gd.so'))
    {
        echo 'You are missing the GD extension for PHP, sorry but I cannot continue.';
        exit();
    }
    
    //    Our allowed query string parameters

    //  To cache or not to cache? that is the question
    if (isset($_GET['cache']))
    {
        if ((int) $_GET['cache'] == 1)
        {
            $cache = true;
        }
        else
        {
            $cache = false;
        }
    }
    else
    {
        $cache = true;
    }

    //    img (the image to reflect)
    if (isset($_GET['img']))
    {
        $source_image = $_GET['img'];

        //$source_image = utf8_decode($source_image);

        $source_image = str_replace('://','',$source_image);
        //$source_image = $_SERVER['DOCUMENT_ROOT'] . DIRECTORY_SEPARATOR . $source_image;
        
        if (file_exists($source_image))
        {
            if ($cache)
            {
                $cache_dir = dirname($source_image);
                $cache_base = basename($source_image);
                $cache_file = 'refl_' . md5($_SERVER['REQUEST_URI']) . '_' . $cache_base;
                $cache_path = $cache_dir . DIRECTORY_SEPARATOR . $cache_file;

                if (file_exists($cache_path) && filemtime($cache_path) >= filemtime($source_image))
                {
                    // Use cached image
                    $image_info = getimagesize($cache_path);
                    header("Content-type: " . $image_info['mime']);
                    readfile($cache_path);
                    exit();
                }
            }
        }
        else
        {
          echo 'Cannot find or read source image';
          exit();
        }
    }
    else
    {
        echo 'No source image to reflect supplied';
        exit();
    }

    //    bgc (the background colour used, defaults to black if not given)
    if (isset($_GET['bgc']) == false)
    {
        $red = 0;
        $green = 0;
        $blue = 0;
    }
    else
    {
        //    Extract the hex colour
        $hex_bgc = $_GET['bgc'];
        
        //    Does it start with a hash? If so then strip it
        $hex_bgc = str_replace('#', '', $hex_bgc);
        
        switch (strlen($hex_bgc))
        {
            case 6:
                $red = hexdec(substr($hex_bgc, 0, 2));
                $green = hexdec(substr($hex_bgc, 2, 2));
                $blue = hexdec(substr($hex_bgc, 4, 2));
                break;
                
            case 3:
                $red = substr($hex_bgc, 0, 1);
                $green = substr($hex_bgc, 1, 1);
                $blue = substr($hex_bgc, 2, 1);
                $red = hexdec($red . $red);
                $green = hexdec($green . $green);
                $blue = hexdec($blue . $blue);
                break;
                
            default:
                //    Wrong values passed, default to black
                $red = 0;
                $green = 0;
                $blue = 0;
        }
    }
    
    //    height (how tall should the reflection be?)
    if (isset($_GET['height']))
    {
        $output_height = $_GET['height'];
        
        //    Have they given us a percentage?
        if (substr($output_height, -1) == '%')
        {
            //    Yes, remove the % sign
            $output_height = (int) substr($output_height, 0, -1);

            //    Gotta love auto type casting ;)
            if ($output_height < 10)
            {
                $output_height = "0.0$output_height";
            }
            else
            {
                $output_height = "0.$output_height";
            }
        }
        else
        {
            $output_height = (int) $output_height;
        }
    }
    else
    {
        //    No height was given, so default to 50% of the source images height
        $output_height = 0.50;
    }
    
    if (isset($_GET['fade_start']))
    {
        if (strpos($_GET['fade_start'], '%') !== false)
        {
            $alpha_start = str_replace('%', '', $_GET['fade_start']);
            $alpha_start = (int) (127 * $alpha_start / 100);
        }
        else
        {
            $alpha_start = (int) $_GET['fade_start'];
        
            if ($alpha_start < 1 || $alpha_start > 127)
            {
                $alpha_start = 80;
            }
        }
    }
    else
    {
        $alpha_start = 80;
    }

    if (isset($_GET['fade_end']))
    {
        if (strpos($_GET['fade_end'], '%') !== false)
        {
            $alpha_end = str_replace('%', '', $_GET['fade_end']);
            $alpha_end = (int) (127 * $alpha_end / 100);
        }
        else
        {
            $alpha_end = (int) $_GET['fade_end'];
        
            if ($alpha_end < 1 || $alpha_end > 0)
            {
                $alpha_end = 0;
            }
        }
    }
    else
    {
        $alpha_end = 0;
    }

    /*
        ----------------------------------------------------------------
        Ok, let's do it ...
        ----------------------------------------------------------------
    */
    
    //    How big is the image?
    $image_details = getimagesize($source_image);
    
    if ($image_details === false)
    {
        echo 'Not a valid image supplied, or this script does not have permissions to access it.';
        exit();
    }
    else
    {
        $width = $image_details[0];
        $height = $image_details[1];
        $type = $image_details[2];
        $mime = $image_details['mime'];
    }
    
    //    Calculate the height of the output image
    if ($output_height < 1)
    {
        //    The output height is a percentage
        $new_height = $height * $output_height;
    }
    else
    {
        //    The output height is a fixed pixel value
        $new_height = $output_height;
    }

    //    Detect the source image format - only GIF, JPEG and PNG are supported. If you need more, extend this yourself.
    switch ($type)
    {
        case 1:
            //    GIF
            $source = imagecreatefromgif($source_image);
            break;
            
        case 2:
            //    JPG
            $source = imagecreatefromjpeg($source_image);
            break;
            
        case 3:
            //    PNG
            $source = imagecreatefrompng($source_image);
            break;
            
        default:
            echo 'Unsupported image file format.';
            exit();
    }


    /*
        ----------------------------------------------------------------
        Build the reflection image
        ----------------------------------------------------------------
    */

    //    We'll store the final reflection in $output. $buffer is for internal use.
    $output = imagecreatetruecolor($width, $new_height);
    $buffer = imagecreatetruecolor($width, $new_height);

    //    Copy the bottom-most part of the source image into the output
    imagecopy($output, $source, 0, 0, 0, $height - $new_height, $width, $new_height);
    
    //    Rotate and flip it (strip flip method)
    for ($y = 0; $y < $new_height; $y++)
    {
       imagecopy($buffer, $output, 0, $y, 0, $new_height - $y - 1, $width, 1);
    }

    $output = $buffer;
    
    /*
        ----------------------------------------------------------------
        Apply the fade effect
        ----------------------------------------------------------------
    */
    
    //    This is quite simple really. There are 127 available levels of alpha, so we just
    //    step-through the reflected image, drawing a box over the top, with a set alpha level.
    //    The end result? A cool fade into the background colour given.

    //    There are a maximum of 127 alpha fade steps we can use, so work out the alpha step rate

    $alpha_length = abs($alpha_start - $alpha_end);

    for ($y = 0; $y <= $new_height; $y++)
    {
        //  Get % of reflection height
        $pct = $y / $new_height;

        //  Get % of alpha
        if ($alpha_start > $alpha_end)
        {
            $alpha = (int) ($alpha_start - ($pct * $alpha_length));
        }
        else
        {
            $alpha = (int) ($alpha_start + ($pct * $alpha_length));
        }

        imagefilledrectangle($output, 0, $y, $width, $y, imagecolorallocatealpha($output, $red, $green, $blue, $alpha));
        
    }

        
    /*
        ----------------------------------------------------------------
        HACK - Build the reflection image by combining the source 
        image AND the reflection in one new image!
        ----------------------------------------------------------------
    */
        $finaloutput = imagecreatetruecolor($width, $height+$new_height);
        imagecopy($finaloutput, $source, 0, 0, 0, 0, $width, $height);
        imagecopy($finaloutput, $output, 0, $height, 0, 0, $width, $new_height);
        $output = $finaloutput;

    /*
        ----------------------------------------------------------------
        Output our final PNG
        ----------------------------------------------------------------
    */

    if (headers_sent())
    {
        echo 'Headers already sent, I cannot display an image now. Have you got an extra line-feed in this file somewhere?';
        exit();
    }
    else
    {
        //    If you'd rather output a JPEG instead of a PNG then pass the parameter 'jpeg' (no value needed) on the querystring

        if (isset($_GET['png']))
        {
            //    PNG
            header("Content-type: image/png");
            imagepng($output);

            // Save cached file
            if ($cache)
            {
                imagepng($output, $cache_path);
            }
            
        }
        else
        {
            if(!isset( $_GET['jpeg']))  $_GET['jpeg'] = 90;
            
            $quality = (int) $_GET['jpeg'];
            
            if ($quality < 1 || $quality > 100)
            {
                $quality = 90;
            }
            
            //    JPEG (the final parameter = the quality, 0 = terrible, 100 = pixel perfect)
            header("Content-type: image/jpeg");
            imagejpeg($output, '', $quality);

            // Save cached file
            if ($cache)
            {
                imagejpeg($output, $cache_path, $quality);
            }
            
           
        }

        imagedestroy($output);
        exit();
    }
?>
Wenn jemand die PHP-Datei separat haben möchte, bitte einfach sagen.

Vielen Danke für jegliche Hilfe!
 

MyBad

localhorst

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Die Hintergrundfarbe kannst du mit einem Parameter (bgc) bestimmen. Zum Beispiel:
HTML:
<img src="reflect2.php?img=img/Eiche_Design_Villach_perlweiss.jpg&bgc=FFFFFF" />

Wenn du keinen Parameter anhängst, musst du es, wie von dir schon versucht, an dieser Stelle ändern:

PHP:
    //    bgc (the background colour used, defaults to black if not given)
    if (isset($_GET['bgc']) == false)
    {
        $red = 0;
        $green = 0;
        $blue = 0;
    }
 
Zuletzt bearbeitet:

m_c

Nicht mehr ganz neu hier

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Es muss anstatt der 0en jeweils ein FF eingetragen werden.
Code:
[COLOR=#000000][COLOR=#007700]{
        [/COLOR][COLOR=#0000BB]$red [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];
        [/COLOR][COLOR=#0000BB]$green [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];
        [/COLOR][COLOR=#0000BB]$blue [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];
    } 
[/COLOR][/COLOR]

 

MyBad

localhorst

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Es muss anstatt der 0en jeweils ein FF eingetragen werden.
Code:
[COLOR=#000000][COLOR=#007700]{
        [/COLOR][COLOR=#0000BB]$red [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];
        [/COLOR][COLOR=#0000BB]$green [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];
        [/COLOR][COLOR=#0000BB]$blue [/COLOR][COLOR=#007700]= [/COLOR][COLOR=#0000BB]0[/COLOR][COLOR=#007700];
    } 
[/COLOR][/COLOR]


Sicher, arbeitet das Skript nicht mit RGB-Werten? Der HEX-Wert wird doch per hexdec() in RGB umgewandelt. So wie ich das aus dem Code lese, muss dort 255 eingetragen werden.
 
Zuletzt bearbeitet:

pusher23

Noch nicht viel geschrieben

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Hallo,
danke für eure Antworten. Bin leider erst jetzt dazu gekommen wieder zu antworten.

@MyBad:
Danke, die Lösung mit dem Anhängen vom Code in der Bildquelle funktioniert prima. Die andere Lösung, also direkt im PHP-Skript, leider nicht (Spiegelung bleibt schwarz, Skript funktioniert weiterhin normal).

Genau das habe ich ja bereits erfolglos probiert.
Nun ist es so, die Galerie soll nach dem Aufbau ein Kunde selbst warten.
Optimal ist deswegen die Lösung mit dem zusätzlichen Code in der Bildquelle nicht, es macht einen zusätzlichen Umstand den ich dem Kunden lieber ersparen würde.

@m_c:
Danke für den Tipp, leider funktioniert es auch mit jeweils "FF" nicht und die Spiegelung bleibt schwarz, die Galerie funktioniert weiterhin problemlos.

Nun wärs optimal wenn mir jemand sagen könnte was ich im PHP-Skript ändern muss um den gewünschten Effekt zu erzeugen.

Vielen Dank euch und sonnige Grüße
 

MyBad

localhorst

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Im Script gibt es 2 Mal diese Stelle. Einmal, wenn kein Wert per Parameter "bgc" angehängt wird und dann noch, wenn ein falscher Wert für "bgc" übergeben wird. Hattest du beide Stellen geändert oder eventuell nur eine / die Falsche?
 

pusher23

Noch nicht viel geschrieben

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Ich hab folgendes geändert:
Original:
PHP:
//    bgc (the background colour used, defaults to black if not given)
    if (isset($_GET['bgc']) == false)
    {
        $red = 0;
        $green = 0;
        $blue = 0;
    }
Geändert Versuch 1:
PHP:
//    bgc (the background colour used, defaults to black if not given)
    if (isset($_GET['bgc']) == false)
    {
        $red = 255;
        $green = 255;
        $blue = 255;
    }
Geändert Versuch 2:
PHP:
//    bgc (the background colour used, defaults to black if not given)
    if (isset($_GET['bgc']) == false)
    {
        $red = FF;
        $green = FF;
        $blue = FF;
    }
Da ich ziemlicher Laie in PHP bin, konnte ich leider nicht rausfinden welche Stelle da noch in Frage kommt für eine Änderung. Wärst du so nett und würdest mir den Code-Schnipsel zeigen welchen du meinst?

Vielen Dank schöne Grüße
 

Isometric

Powerproster

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Hattest du beide Stellen geändert oder eventuell nur eine / die Falsche?

Du musst auch noch diese Stelle ändern:
PHP:
            default:
                //    Wrong values passed, default to black
                $red = 0;
                $green = 0;
                $blue = 0;
obwohl die eigentlich nur greift, wenn ein "falscher" Wert für 'bgc' übergeben wurde.

Wenn ich mich zu dem Fehler durchkämpfen müsste, würde ich zum Test die Variablen $red, $green und $ blue an der Stelle definieren, wo sie zur Ausgabe gebraucht werden und dort mal die Werte 255 statt 0 eintragen. Diese Stelle wäre hier:
PHP:
        imagefilledrectangle($output, 0, $y, $width, $y, imagecolorallocatealpha($output, $red, $green, $blue, $alpha));
 

pusher23

Noch nicht viel geschrieben

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Hallo Isometric,
danke für deine Antwort.

Ich habe nun, wie von dem User MyBad empfohlen, auch an der zweiten Stelle die Werte geändert nachdem du mir nun gesagt hast wo ich die Stelle finde.

Also bei
// bgc (the background colour used, defaults to black if not given)
und

// Wrong values passed, default to black
statt den Nullen jeweils 255 eingetragen.
Leider ohne Erfolg. Auch mit den Werten FF brachte es nichts.

Hab nun die Stelle der Ausgabe gesucht und statt der Null 255 eingetragen.
Trau mich aber zu wetten dass du das ein bisschen anders gemeint hast.
Leider weiß ich nicht genau wie ich die Stelle umschreiben muss da ich wie gesagt absoluter Laie bin.

PS: Im letzten Versuch waren also an allen 3 erwähnten Stellen (die 2 erwähnten Stellen oben sowie bei Ausagbe) statt den Nullen 255 eingetragen. Das nur zur Info, falls nur an bestimmten Stellen die 255 drin stehen darf.

Darüber hinaus nehme ich an, an allen 3 erwähnten Stellen jeweils FF einzutragen würde ebenfalls nichts bringen?

Danke schöne Grüße
 

Isometric

Powerproster

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Ich hatte es so gemeint:
PHP:
$red = 255;
$green = 255;
$blue =255;
imagefilledrectangle($output, 0, $y, $width, $y, imagecolorallocatealpha($output, $red, $green, $blue, $alpha));
Also zum Testen die Variablen direkt vor der Verwendung noch mal definieren, oder sogar die Zahlen direkt in den Aufruf der Funktion eintragen:
PHP:
imagefilledrectangle($output, 0, $y, $width, $y, imagecolorallocatealpha($output, 255, 255, 255, $alpha));
 

pusher23

Noch nicht viel geschrieben

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

@Isometric:
Ich muss jetzt leider weg vom PC, werd das heut Abend nochmals ausgiebig durchprobieren, irgendwie muss es ja gehen.

Danke für deine Geduld und Hilfe!
 

MyBad

localhorst

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

Mal ganz doof gefragt: Du bist dir sicher, dass du die Änderungen in der richtigen Datei vorgenommen, bzw. die Änderungen auch hochgeladen hast?

Manchmal sind es ja gerade in der Programmierung die absoluten Kleinigkeiten und Flüchtigkeitsfehler, die einem das größte Kopf zerbrechen bereiten.
 

pusher23

Noch nicht viel geschrieben

AW: PHP-Skript "Reflections" - Farbe auf weiß umstellen

@MyBad:
Hab mir alles nochmal ganz genau durchgesehen. Hab dabei festgestellt, das betroffene PHP-Skript musste wirklich erst via Javascript aktiv geschalten werden.
Muss mich echt entschuldigen euch hier auf eine falsche Fährte gelockt zu haben!
Ich habe es zum Schluss im Javascript lösen können.

Falls später jemand die Lösung braucht:
1. Datei "imageflow.js" öffnen
2. Zeile 154 suchen
3. Hinter dem Wortlaut my.reflectionGET ohne Abstand +'&bgc=FFFFFF' einfügen
4. Somit lautet die Zeile:
src = my.reflectPath+'reflect'+version+'.php?img='+src+my.reflectionGET+'&bgc=FFFFFF';

Somit wird die Spiegelung weiß, jeder andere RGB-Farbwert sollte möglich sein.

Danke an euch dass ihr mich unterstützt habt, obwohl ich euch unbeabsichtigt auf die falsche Fährte gelockt habe. Habt ein angenehmes Wochenende :daumenhoch:
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.619
Beiträge
1.538.363
Mitglieder
67.540
Neuestes Mitglied
Alex Weidner
Oben