Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Thumbnail erzeugen und anzeigen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Thumbnail erzeugen und anzeigen

    Hi@all

    Bitte mal folgenden Script testen.
    Ich bekomme nur wirres Zeug angezeigt.

    Wenn ich allerdings die Function in eine separate Datei auslagere und das IMG mit (thumbnail.php?src=".$file."&size=".$size.") aufrufe funktioniert alles.

    ???
    Code:
    <html>
    <head>
    </head>
    <body>
    <? 
    // größe der thumbnails (breite):
    $size = 100;
    //verzeicnis einlesen
    $dir  = opendir(getcwd());
    $file = "x";
    echo "<table align='center' border='0'>
          <tr>";
    while ($file!= "")
    {
     $file     = readdir($dir);
     $xtension = explode(".",$file);
     if ($xtension[count($xtension)-1]=="jpg")
     {
      $src = thumbnail($file,$size);
      #$src = "thumbnail.php?src=".$file."&size=".$size."";
      echo "<td style='padding:3; border:1px solid silver'>
             [img]".$src."[/img]";}
    }
    echo "</tr></table>";
    
    
    ?>
    </body>
    </html>
    <?
    function thumbnail($file,$size)
    {
     $gdinfo    = gd_info();
     $gdversion = preg_replace('/[^0-9\.]/','',$gdinfo['GD Version']);
     $temp      = explode(".",$gdversion);
     $gdv       = $temp[0];
    
     // original bild einlesen
     $image     = @ImageCreateFromJPEG ($file);
    
     // breite und höhe des original bildes ermitteln
     $breite    = ImageSX($image);
     $hoehe     = ImageSY($image);
    
     // breite und höhe des thumbnails berechnen
     if ( $breite > $hoehe ) { $neueBreite = $size; $neueHoehe  = intval($hoehe *$neueBreite/$breite); }
     else                    { $neueHoehe  = $size; $neueBreite = intval($breite*$neueHoehe/$hoehe);   }
    
     // leeres thumbnail erzeugen
     if ($gdv >= 2) { $thumb = imagecreatetruecolor ($neueBreite, $neueHoehe); }
     else           { $thumb = imagecreate          ($neueBreite, $neueHoehe); }
    
     // ...und bild in das thumbnail kopieren
     if ($gdv >= 2) { imagecopyresampled ($thumb, $image,0,0,0,0, $neueBreite, $neueHoehe, $breite, $hoehe); }
     else           { imagecopyresized   ($thumb, $image,0,0,0,0, $neueBreite, $neueHoehe, $breite, $hoehe); }
    
     // ausgabe des thumbnails
     header("Content-type: image/jpeg");
     $src = imagejpeg($thumb,'',100);
     return($src);
    }
    ?>
    Danlke für eure Bemühungen
    Thx@all

  • #2
    Wozu header("Content-type: image/jpeg"); ? Du willst doch offenbar lediglich einen String zurückwerfen.

    http://de2.php.net/imagejpeg
    imagejpeg -- Ausgabe des Bildes im Browser oder als Datei
    int imagejpeg ( int im [, string filename [, int quality]] )


    Warum soll dein Bild in einem dateinamenlosen Leerstring gespeichert werden?

    Dein Skript ist komplett unsinnig würde ich sagen. Du weißt ja nichtmal selbst was du machst oder willst. Wundert mich sehr dass es ausgelagert funktioniert.

    Kommentar


    • #3
      Hi@Zergling

      Wieso unsinnig ???
      Kopier das Script und teste es.

      Das Script erzeugt Thumbnails von Bildern aus einem Verzeichnis ohne diese abzuspeichern, deshalb auch 'header("Content-type: image/jpeg"); ' -> Ausgabe im Brwoser.

      Kommentar


      • #4
        naja is doch ganz klar das es nicht funktioniert du must das Script welches das Image erzeugt und ausgibt als Bild verlinken

        Code:
        [img]./image.php[/img]

        @Zergling
        Um die Angabe des Dateinamen zu umgehen, dennoch aber den Parameter als solchen zu nutzen, können Sie einen Leerstring ('') benutzen.
        Gewisse Dinge behält man besser für sich, z.B. das man gewisse Dinge für sich behält.

        Kommentar


        • #5
          Tu ich das nicht hier ???

          Code:
           if ($xtension[count($xtension)-1]=="jpg") 
           { 
            $src = thumbnail($file,$size); 
            #$src = "thumbnail.php?src=".$file."&size=".$size.""; 
            echo "<td style='padding:3; border:1px solid silver'> 
                   [img]".$src."[/img]";}

          Kommentar


          • #6
            header("Content-type: image/jpeg");
            Dann sollten aber Angaben wie HTML, BODY etc. aus dem Script verschwinden.
            Oder deine Funktion in eine extra Datei packen.

            Kommentar


            • #7
              Auch wenn ich
              HTML, BODY
              weglasse - kommt nur wirrwar.
              Mit auslagern, wie gesagt geht es ja.

              Kommentar


              • #8
                Jo klar, bitte beachte bei Header(), dass davor keine Ausgabe zum Browser erfolgt.
                Also weder Zeilenumbrüche, Leerzeichen oder sonstwas.

                Kommentar


                • #9
                  Achso, das mit dem Leerstring hatte ich übersehen.

                  Bei deinem Script solltest du dich aber entscheiden, was du ausgeben willst, HTML-Code oder den Thumbnail selber. Nur wirrwarr heißt, dass der Binärcode des erzeugten Bildes wahrscheinlich (wie angefordert) ausgegeben wird.

                  Deshalb sagte ich, dass Script ist unsinnig.
                  Du willst dass die Funktion die Adresse des Thumbs zurückwirft, sendest aber schon einen header für JPEGs?! Was willst du nun. Entweder dass die Funktion ein Thumbnail erzeugt und anzeigt oder nur seine Adresse liefern? Dann misch doch nicht alles. Deshalb sage ich, du verstehst dein Script offensichtlich selbst nicht, was schonmal katastrophal ist beim Programmieren.

                  Kommentar


                  • #10
                    Na mal langsam ...

                    Also der Sinn ist doch klar. Natürlich möchte ich ein Thumbnail ausgeben.
                    Und es funtkioniert ja auch, wenn ich die Function in eine separate Datei auslagere und dann im <img> tag aufrufe.

                    Nun wollte ich aber das auslagern der function vermeiden und alles in einer Datei abwickeln, un da kommt eben das problem das nicht das Thumbnail sondern sein Binäroce angezeigt wird.

                    So, wie bitte könnte ich das jetzt hinbekommen, alles in einer Datei zu vereinen ?

                    Kommentar


                    • #11
                      Deine Funktion muss den Binärcode anstatt auszugeben in eine Datei speichern, sich den Pfad dorthin merken und ihn zurückwerfen (return). Dazu musst du dir anschauen, welche Funktionen mit welchen Argumenten den Binärcode sofort zurückwerfen und mit welchen du das speichern kannst.

                      Eine Trennung ist aber durchaus sinnvoll.

                      Zusätzlich erzeugst du bei jedem Aufruf die Thumbnails neu. Nicht sehr performant.

                      Kommentar


                      • #12
                        Also der Sinn ist doch klar. Natürlich möchte ich ein Thumbnail ausgeben.
                        Sicher, bist nicht erste der danach fragt

                        So, wie bitte könnte ich das jetzt hinbekommen, alles in einer Datei zu vereinen ?
                        Solange wie du den Sinn und Zweck von Header() nicht verstanden hast, garnicht.

                        Es sei denn du speicherst das Bild erst ab, und rufst es dann auf.
                        Oder stellst deine Funktion ganz an den Anfang deiner Datei, ohne Lerrzeichen, Zeilenumbrüche, echo-Ausgabe etc....

                        Kommentar


                        • #13
                          Ok

                          aber wieso funktioniert das ganze wenn ich die Datei auslagere ???

                          Kommentar


                          • #14
                            aber wieso funktioniert das ganze wenn ich die Datei auslagere ???
                            So jetzte bekommste Hausaufgaben:

                            http://www.php.net/header

                            Kommentar


                            • #15
                              .
                              So jetzte bekommste Hausaufgaben:

                              http://www.php.net/header

                              OK , hab ich gelesen.
                              Seh aber nicht durch, was das bedeuten soll ???

                              Bitte erklären - auf deutsch

                              Danke

                              Kommentar

                              Lädt...
                              X