tim: funktion in der schleife geht nicht mehr ?

hi,

ich hab folgendes problem, und zwar hab ich eine schleife die einen ordner ausliest und den inhalt in form von namen ausgibt(es sind nur bilder drinne d.h. er gibt unter der varibale $file immer den namen aus zb. test1.jpg,test2.jpg.

jetzt habe ich eine funktion die thumbnails erstellt und wenn man sie ausserhalb der schleife aufruft funtkioniert sie und erstelt ein thumb on the fly.

vielleicht könnt ihr mir helfen ich weis nicht mehr weiter

hier erstma der code wie es geht:
Code:

$img_src =  "./bilder/big/florida.jpg";
$img_width ="150";
$img_height ="150";
  $im = ImageCreateFromJPEG($img_src);
  list($src_width, $src_height) = getimagesize($img_src);
  if($src_width >= $src_height) {
    $new_image_width = $img_width;
    $new_image_height = $src_height * $img_width / $src_width;
  }
  if($src_width < $src_height) {
    $new_image_height = $img_width;
    $new_image_width = $src_width * $img_height / $src_height;
  }
  $new_image = ImageCreateTrueColor($new_image_width, $new_image_height);
  ImageCopyResampled($new_image, $im, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
  ImageJPEG($new_image);

und hier wie es nicht mehr geht:
Zitat:

function list_pic($dir){
$dir = opendir($dir);
while (false !== ($file = readdir ($dir)))
{
$ext = substr($file,strlen($file)-3, 4); ## UMSTÄNDLICH NOCH ALPHA MUSS VERBESSERT WERDEN
if($ext == jpg){

$img_src = "./bilder/big/$file";
$img_width = "150";
$img_height = "150";

$im = ImageCreateFromJPEG($img_src);
list($src_width, $src_height) = getimagesize($img_src);
if($src_width >= $src_height) {
$new_image_width = $img_width;
$new_image_height = $src_height * $img_width / $src_width;
}
if($src_width < $src_height) {
$new_image_height = $img_width;
$new_image_width = $src_width * $img_height / $src_height;
}
$new_image = ImageCreateTrueColor($new_image_width, $new_image_height);
ImageCopyResampled($new_image, $im, 0, 0, 0, 0, $new_image_width,$new_image_height, $src_width, $src_height);
ImageJPEG($new_image);
}
}
closedir($dir);
}

mfg tim

  1. hi,

    $img_src =  "./bilder/big/florida.jpg";

    $img_src = "./bilder/big/$file";

    hast du geprüft, ob hier im zweiten falle ein _sinnvoller_ inhalt in der variablen $img_src steht?

    ImageJPEG($new_image);

    das imagejpeg ohne zweiten parameter direkt die bilddaten ausgibt, und _kein_ bild auf der platte speichert, ist dir bewusst und hier auch so gewollt?
    (letzteres kann ich mir kaum vorstellen, denn binärdaten zu mehr als einem bild direkt an den browser auszugeben macht m.e. wenig sinn.)

    gruss,
    wahsaga

    1. hi,

      also in dem falle sollte es shcon gewollt sein denn ich möchte die bilder nicht 2 mal speichern also direk ton the fly ein thumbnail erstellen auf das die leute dann klicken können um ein großes bild zu sehen.(dacht ich mir irgendwie so:D)

      desweiteren kommt bei $file immer der name der datei raus also florida.jpg oder test.jpg also hab getestet ob immer was sinnvolles zum verarbeiten kommt.

      du kannst es dir auchmal angucken
      http://krause.hopto.org/test/frm_bild_upload.php

      1. hi,

        also in dem falle sollte es shcon gewollt sein denn ich möchte die bilder nicht 2 mal speichern also direk ton the fly ein thumbnail erstellen auf das die leute dann klicken können um ein großes bild zu sehen.(dacht ich mir irgendwie so:D)

        schön und gut, aber wie willst du in _einem_ script _mehrere_ bilder an den browser ausgeben?

        damit der browser weiss, achtung, hier kommt ein von php generiertes bild, musst du a) den korrekten header für den bild-typ ausgeben, und b) die binärdaten zu _diesem_ bild hinterherschicken.

        dem browser _mehrere_ bilder auf einmal direkt auszuliefern, kann m.e. nicht funktionieren.
        also entweder bilder als dateien zwischenspeichern, oder die funktion zur "on thy fly"-erstellung in ein eigenes script speichern, und dieses dann mehrmals mit unterschiedlichen eingangsdaten per <img>-tag auf der seite einbinden.

        und die von dir angegebene beispielseite http://krause.hopto.org/test/frm_bild_upload.php bestätig meine vermutung, dass du das "on the fly"-erzeugen von bildern noch nicht ganz verstanden hast - mein browser zeigt mir beim klick auf den link nur binären zeichensalat an - also scheint wohl der erwähnte header mit der mime type angabe, die dem browser signalisiert, "hier kommen jetzt bilddaten", noch zu fehlen.

        sieh dir doch nochmal ein paar beispiele zu den grafik-funktionen im manual an, um zu sehen, wie du das mit dem header machen musst.

        gruss,
        wahsaga

        1. hi,

          ja also es ging ja, ich bin ja im mom am testen um es zu verstehen :D
          und ich dachte halt es muss doch auch eghen die bilder direk tauszugeben ohne erstn  ein thumbnail zu speichern

          1. hi,

            ja also es ging ja, ich bin ja im mom am testen um es zu verstehen :D

            "ging" es nur im IE, der ja bekanntlich dazu neigt, so gut wie alles irgendwie anzuzeigen (auch bei binärdaten automatisch zu "raten", dass ein bild gemeint sein _könnte_, würde ich ihm zutrauen), oder auch in anderen browsern?
            wie gesagt, mein opera zeigt mir beim klick auf den link in deinem beispiel nur binärsalat an (ungeniessbar, ohne passenden header als "dressing").

            und ich dachte halt es muss doch auch eghen die bilder direk tauszugeben ohne erstn  ein thumbnail zu speichern

            natürlich "geht" es, aber wie gesagt nicht auf deinem weg.

            ich wiederhole es nochmals:

            um ein bild anzuzeigen, musst du dem browser a) mitteilen, dass er jetzt bilddaten geliefert bekommt, und dann b) die daten für genau _ein_ bild liefern, nicht mehrere auf einmal.

            gruss,
            wahsaga

            1. Hallo Wahsaga,

              "ging" es nur im IE, der ja bekanntlich dazu neigt, so gut wie alles irgendwie anzuzeigen (auch bei binärdaten automatisch zu "raten", dass ein bild gemeint sein _könnte_, würde ich ihm zutrauen), oder auch in anderen browsern?

              Wenn überhaupt, dann ging das im Netscape. Der konnte (früher zumindest) inline-Images verarbeiten.

              Grüße

              Tom

              1. hi,

                Wenn überhaupt, dann ging das im Netscape. Der konnte (früher zumindest) inline-Images verarbeiten.

                der firebird zeigt mir auf http://aktuell.de.selfhtml.org/artikel/grafik/inline-images/index.htm das bild auch, es "funktioniert" also noch in den geckos.

                btw: das verhalten des opera wundert mich hier, 7.20 zeigt mir den oberen teil des bildes an (ca. 1cm), darunter wird dann noch platz frei gelassen in der tatsächlichen grösse des bildes. "wir haben's implementiert, aber nur teilweise"?

                gruss,
                wahsaga

      2. Moin!

        also in dem falle sollte es shcon gewollt sein denn ich möchte die bilder nicht 2 mal speichern also direk ton the fly ein thumbnail erstellen auf das die leute dann klicken können um ein großes bild zu sehen.(dacht ich mir irgendwie so:D)

        Grundsätzlich gilt der Spruch: "Pro URL immer nur ein Bild!"

        Mit anderen Worten: Wenn du eine HTML-Seite mit Thumbnails aufrufst (statisch), dann existiert eine URL für die HTML-Seite, die auch nur aus HTML besteht, und jedes eingebundene Bild besteht aus einer weiteren URL, welche per <img> eingebunden ist.

        Wenn du da jetzt dynamische Dinge generieren willst, bedeutet das für dich:
        a) Du brauchst ein Skript, welches ein gegebenes Verzeichnis auf das Vorhandensein von Bildern untersucht und entsprechend <img>-Tags generiert.
        b) Du brauchst ein Skript, welches als URL-Parameter den Bildnamen erhält und daraufhin genau _ein_ Thumbnail des großen Bildes generiert und als _Bild_ (wichtig: Mime-Type mit header() senden) ausgibt.

        Was nicht geht, du aber derzeit versuchst: HTML-Seite und Bilder alle in einem Arbeitsgang ausgeben.

        Übrigens: Vorsicht mit dem Bildparameter. Damit kann man dir böses tun, wenn du nicht sehr genau prüfst, zu welchem Ergebnis die Pfad- und Bildangabe kommt. Es ist sinnvoll, nur ein einziges Verzeichnis, in dem sich die Bilder befinden können, zuzulassen, und als Bildnamen dann nur exakt den Dateinamen zu verwenden, aber keine Pfadangaben. Das beides zusammengesetzt kann nur ein (möglicherweise nicht existentes) Bild im definierten Verzeichnis ergeben, aber keinesfalls irgendein Bild auf deinem Webspace ausgeben, was vielleicht geheim bleiben sollte. Oder Bilder von anderen Webspaces, sofern die gegenüber deinem ungenügend abgesichert sind.

        - Sven Rautenberg

        --
        "Beim Stuff für's Web gibts kein Material, was sonst das Zeugs ist, aus dem die Sachen sind."
        (fastix®, 13. Oktober 2003, 02:26 Uhr -> </archiv/2003/10/60137/#m338340>)