Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Bild proportional verkleinern und mit Wasserzeichen überlegen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Bild proportional verkleinern und mit Wasserzeichen überlegen

    Hi zusammen,

    ich komme hier leider nicht weiter

    Und zwar habe ich folgendes Problem:

    Ich habe 1x eine Wasserzeichengrafik und zum andern ein Bild, auf welches ich das Wasserzeichen legen möchte!

    So, nun ist das Bild, auf welches das Wasserzeichen soll aber zu groß. Somit will ich es erstmal proportional kleiner skalieren.

    Das ganze hab ich versucht, aber es funktioniert leider nicht so wie ich das gerne hätte

    Wenn ich nur das Wasserzeichen auf das Bild legen will, die größe aber nicht ändern lasse, funktioniert es (imagejpeg($Grafik)
    --> Hab ich als Kommentar im Code unten geschrieben

    Aber wenn ich meine dazugehörige Funktion zum skalieren aufrufe, welche einzeln auch funktioniert, klappt es nicht!

    Seh ichs nicht? Ich weiß nicht mehr weiter
    Ihr?

    LG Chris

    PHP-Code:
    <?php

    function GrafikSkalieren($Grafik$Seite) {

        
    $Bilddaten getimagesize($Grafik);
        
    $Breite $Bilddaten[0];
        
    $Hoehe $Bilddaten[1];

        if(
    $Breite $Hoehe) {
            
    $NeueBreite $Seite;
            
    $NeueHoehe $Seite $Breite $Hoehe;
        }
        else {
            
    $NeueHoehe $Seite $Breite $Hoehe;
              
    $NeueBreite $NeueHoehe $Breite $Hoehe;
        }

        
    $SkalierteGrafik ImageCreateTrueColor($NeueBreite$NeueHoehe);
        
    $Originalgrafik ImageCreateFromJPEG($Grafik);
        
    ImageCopyResampled($SkalierteGrafik$Originalgrafik0000$NeueBreite$NeueHoehe$Breite$Hoehe);

        return 
    $SkalierteGrafik;
    }



    //Endbild wird 182x122 Pixel

    header("Content-Type: image/jpeg");

    include(
    "../config/db.inc.php");
    $jetzt time();

    $result_event_navi mysql_query("SELECT event_datum, event_wo, event_flyer FROM event WHERE event_datum > '$jetzt' ORDER BY event_datum ASC LIMIT 1");
    $result_event_navi01 mysql_fetch_array($result_event_navi);


    $Grafik ImageCreateFromJPEG("../img/event/flyer/".$result_event_navi01['event_flyer']);



    $Wasserzeichen ImageCreateFromPNG("../img/layout/event_flyer_BG.png");

    ImageCopy($Grafik$Wasserzeichenimagesx($Grafik)-imagesx($Wasserzeichen), imagesy($Grafik)-imagesy($Wasserzeichen), 00imagesx($Wasserzeichen), imagesy($Wasserzeichen));

    imagejpeg(GrafikSkalieren($Grafik182));

    //imagejpeg($Grafik);

    ?>

  • #2
    Da fehlen ein paar Informationen.
    Zum Beispiel: Wie groß soll das Ergebnisbild sein? Genauso groß wie das Wasserzeichen? Mindestens so groß? Höchstens so groß? Wie soll das Wasserzeichen skaliert werden? Soll es überhaupt skaliert werden? In welchen Fällen und wie?

    Kommentar


    • #3
      //Endbild wird 182x122 Pixel

      Wasserzeichen soll garnicht skalliert werden, nur das normale Bild

      Das Originalbild, welches skaliert werden soll, soll in der breite mind. 182 pixel groß sein bzw. das ist ja im endeffekt frei variable

      LGC

      Kommentar


      • #4
        Zitat von CHRIS Beitrag anzeigen
        Wasserzeichen soll garnicht skalliert werden, nur das normale Bild
        Aber im vorliegenden Code skalierst Du doch das Wasserzeichen, nachdem es in das Zielbild kopiert wurde. Das ist so geplant?
        Und dann passt der Code auch nicht zusammen, da Du GrafikSkalieren() nicht das übergibst, was es erwartet.

        Kommentar


        • #5
          Wieso skaliere ich das Wasserzeichen?

          Hiermit setze ich nur das Wasserzeichen auf das Bild:

          PHP-Code:
          ImageCopy($Grafik$Wasserzeichenimagesx($Grafik)-imagesx($Wasserzeichen), imagesy($Grafik)-imagesy($Wasserzeichen), 00imagesx($Wasserzeichen), imagesy($Wasserzeichen)); 

          Kommentar


          • #6
            Und danach rufst Du
            imagejpeg(GrafikSkalieren($Grafik, 182));
            auf. Das Wasserzeichen würde also mitsamt dem Bild skaliert werden.

            Und zusätzlich funktioniert das auch nicht, da $Grafik eine gd-Resource ist und keine Dateipfad wie GrafikSkalieren() erwartet. Deshalb sollte PHP eigentlich auch einige Warnungen ausgeben. Anscheinend lässt Du Dir diese nicht anzeigen, entweder im Browser oder im error log, was ich eigentlich -und ich bitte dies als konstruktive Kritik aufzunehmen- bei Fortgeschrittenen voraussetze. Ich tippe mal zu Deinen Gunsten darauf, dass es Zeit für einen erholsamen Schlaf ist

            Kommentar


            • #7
              Ist es den überhaupt möglich das hintereinander zu machen?

              Sprich erst das Bild skalieren und dann ein Wasserzeichen drauf legen?

              Fehlermeldungen bekomme ich, versteht die Fehler aber leider nicht.

              Hab jetzt nochmal etwas umgestellt:

              PHP-Code:
              <?php
              //Endbild wird 182x122 Pixel

              //header("Content-Type: image/jpeg");

              include("../config/db.inc.php");
              $jetzt time();

              $result_event_navi mysql_query("SELECT event_datum, event_wo, event_flyer FROM event WHERE event_datum > '$jetzt' ORDER BY event_datum ASC LIMIT 1");
              $result_event_navi01 mysql_fetch_array($result_event_navi);

              function 
              GrafikSkalieren($Grafik$Seite) {

                  
              $Bilddaten getimagesize($Grafik);
                  
              $Breite $Bilddaten[0];
                  
              $Hoehe $Bilddaten[1];

                  if(
              $Breite $Hoehe) {
                      
              $NeueBreite $Seite;
                      
              $NeueHoehe $Seite $Breite $Hoehe;
                  }
                  else {
                      
              $NeueHoehe $Seite $Breite $Hoehe;
                        
              $NeueBreite $NeueHoehe $Breite $Hoehe;
                  }

                  
              $SkalierteGrafik ImageCreateTrueColor($NeueBreite$NeueHoehe);
                  
              $Originalgrafik ImageCreateFromJPEG($Grafik);
                  
              ImageCopyResampled($SkalierteGrafik$Originalgrafik0000$NeueBreite$NeueHoehe$Breite$Hoehe);

                  return 
              $SkalierteGrafik;
              }



              $Grafik ImageCreateFromJPEG("../img/event/flyer/".$result_event_navi01['event_flyer']);



              $Wasserzeichen ImageCreateFromPNG("../img/layout/event_flyer_BG.png");

              ImageCopy($Grafik$Wasserzeichenimagesx($Grafik)-imagesx($Wasserzeichen), imagesy($Grafik)-imagesy($Wasserzeichen), 00imagesx($Wasserzeichen), imagesy($Wasserzeichen));

              imagejpeg(GrafikSkalieren($Grafik182));

              //imagejpeg($Grafik);

              ?>

              Und dazu bekomm ich diese Fehler:

              Code:
              Warning:  getimagesize(Resource id #6) [function.getimagesize]: failed to open stream: No such file or directory in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 14
              
              Warning:  Division by zero in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 23
              
              Warning:  Division by zero in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 24
              
              Warning:  imagecreatetruecolor() [function.imagecreatetruecolor]: Invalid image dimensions in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 27
              
              Warning:  imagecreatefromjpeg(Resource id #6) [function.imagecreatefromjpeg]: failed to open stream: No such file or directory in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 28
              
              Warning:  imagecopyresampled(): supplied argument is not a valid Image resource in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 29
              
              Warning:  imagejpeg(): supplied argument is not a valid Image resource in C:\xampp\htdocs\v6\event\event_flyer182x122px.php on line 44

              Kommentar


              • #8
                Wenn ich den ersten Fehler so korrigiere, ist das Wasserzeichen aufs Bild legen Script ausgeschossen (

                PHP-Code:
                <?php
                //Endbild wird 182x122 Pixel

                header("Content-Type: image/jpeg");

                include(
                "../config/db.inc.php");
                $jetzt time();

                $result_event_navi mysql_query("SELECT event_datum, event_wo, event_flyer FROM event WHERE event_datum > '$jetzt' ORDER BY event_datum ASC LIMIT 1");
                $result_event_navi01 mysql_fetch_array($result_event_navi);


                $image_pfad "../img/event/flyer/".$result_event_navi01['event_flyer'];

                function 
                GrafikSkalieren($Grafik$Seite) {

                    
                $Bilddaten getimagesize($Grafik);
                    
                $Breite $Bilddaten[0];
                    
                $Hoehe $Bilddaten[1];

                    if(
                $Breite $Hoehe) {
                        
                $NeueBreite $Seite;
                        
                $NeueHoehe $Seite $Breite $Hoehe;
                    }
                    else {
                        
                $NeueHoehe $Seite $Breite $Hoehe;
                          
                $NeueBreite $NeueHoehe $Breite $Hoehe;
                    }

                    
                $SkalierteGrafik ImageCreateTrueColor($NeueBreite$NeueHoehe);
                    
                $Originalgrafik ImageCreateFromJPEG($Grafik);
                    
                ImageCopyResampled($SkalierteGrafik$Originalgrafik0000$NeueBreite$NeueHoehe$Breite$Hoehe);

                    return 
                $SkalierteGrafik;
                }



                $Grafik ImageCreateFromJPEG("../img/event/flyer/".$result_event_navi01['event_flyer']);



                $Wasserzeichen ImageCreateFromPNG("../img/layout/event_flyer_BG.png");

                ImageCopy($Grafik$Wasserzeichenimagesx($Grafik)-imagesx($Wasserzeichen), imagesy($Grafik)-imagesy($Wasserzeichen), 00imagesx($Wasserzeichen), imagesy($Wasserzeichen));

                imagejpeg(GrafikSkalieren($image_pfad182));

                //imagejpeg($Grafik);

                ?>

                Kommentar


                • #9
                  ImageCopy($Grafik, $Wasserzeichen, imagesx($Grafik)-imagesx($Wasserzeichen), imagesy($Grafik)-imagesy($Wasserzeichen), 0, 0, imagesx($Wasserzeichen), imagesy($Wasserzeichen));

                  imagejpeg(GrafikSkalieren($image_pfad, 182));
                  $Grafik "enthält" die geänderten Bilddaten.
                  Die Datei auf der Festplatte nicht. Aber Du übergibst GrafikSkalieren() den Pfad zur unveränderten Datei auf der Platte.
                  Übergibt doch einfach die gd-Resource und arbeite damit innerhalb der Funktion. Einfach das Laden der Datei innerhalb von GrafikSkalieren weglassen.

                  Kommentar


                  • #10
                    Hab mich jetzt nochmal von vorn dran gesetzt, ohne Funktion gearbeitet und nu funktioniert es auch so wie ich es will

                    Danke für deinen Gedankenanstoß

                    Vielleicht hat ja irgendjemand irgnedwann mal das gleich Problem, ich lass das funktionierende Script mal hier


                    PHP-Code:
                    <?php
                    //Endbild wird 182x122 Pixel
                    header("Content-Type: image/jpeg");

                    include(
                    "../config/db.inc.php");
                    $jetzt time();


                    $result_event_navi mysql_query("SELECT event_datum, event_wo, event_flyer FROM event WHERE event_datum > '$jetzt' ORDER BY event_datum ASC LIMIT 1");
                    $result_event_navi01 mysql_fetch_array($result_event_navi);


                    $flyer_pfad "../img/event/flyer/".$result_event_navi01['event_flyer'];

                    $Wasserzeichen ImageCreateFromPNG("../img/layout/event_flyer_BG.png");

                    $Seite 182;

                        
                    $Bilddaten getimagesize($flyer_pfad);
                        
                    $Breite $Bilddaten[0];
                        
                    $Hoehe $Bilddaten[1];

                        if(
                    $Breite $Hoehe) {
                            
                    $NeueBreite $Seite;
                            
                    $NeueHoehe $Seite $Breite $Hoehe;
                        }
                        else {
                            
                    $NeueHoehe $Seite;
                              
                    $NeueBreite $Seite $Breite $Hoehe;
                        }


                        
                    $SkalierteGrafik ImageCreateTrueColor(182122);
                        
                    $Originalgrafik ImageCreateFromJPEG($flyer_pfad);


                        
                    ImageCopyResampled($SkalierteGrafik$Originalgrafik0000$NeueBreite$NeueHoehe$Breite$Hoehe);



                    ImageCopy($SkalierteGrafik$Wasserzeichenimagesx($SkalierteGrafik)-imagesx($Wasserzeichen), imagesy($SkalierteGrafik)-imagesy($Wasserzeichen), 00imagesx($Wasserzeichen), imagesy($Wasserzeichen));

                    imagejpeg($SkalierteGrafik);

                    ?>

                    Kommentar

                    Lädt...
                    X