britta: Galerie - Sortieren von Bildern innerhalb eines Ordners

hallo!

ich versuche, mir ein kleines skript zu schreiben, das die in einem verzeichnis liegenden bilder im browser ausliest. ich finde keinen passenden befehl, die bilder, die nach dem enstehungsdatum benannnt sind (also 010202.jpg) in der reihenfolge ausgeben zu lassen, dass das neuste oben erscheint und das erste ganz unten.

fällt euch etwas ein?

grüße
britta

  1. Hi!

    ich versuche, mir ein kleines skript zu schreiben, das die in einem verzeichnis liegenden bilder im browser ausliest. ich finde keinen passenden befehl, die bilder, die nach dem enstehungsdatum benannnt sind (also 010202.jpg) in der reihenfolge ausgeben zu lassen, dass das neuste oben erscheint und das erste ganz unten.

    Klar, EINEN Befehl gibt es da sicher nicht - da musst du schon selbst was schreiben!

    Wenn deine Dateien wirklich ganz streng nach diesem Format benannt sind, kannst du allerdings jeden Dateinamen einlesen lassen und in ein Array schreiben.
    Dann behältst du das erste und machst eine Datenbank aus einem Array, von dem jedes Element noch mal ein Array ist. (du kannst aber auch einfach mit Schlüsseln und Werten arbeiten).
    Als zweites Element der inneren Arrays rechnest du immer die Time-Werte der Daten aus, und diese time-Werte kann man dann sortieren.

    Zur Veranschaulichung:

    Hauptarray( Array("010102.jpg","<time-wert hiervon") , Array("020102.jpg","<time-wert davon") )

    Das ganze ist aber sehr kompliziert, da fragt man sich lieber nach dem Sinn des ganzen.

    Viel Glück!

    Marc Reichelt || http://www.marcreichelt.de/

    --
    tel.: 0049/6181/72224
    Linux is like a wigmam - no windows, no gates and an Apache inside!!!
    1. Hallo,

      Voraussetzung:
      alle Bilder im Verzeichnis habe  die passende Endung .jpg
      alle Bilder im Verzeichnis sind nach Datum in Ansi-Notation benannt, also z.B. JJMMTTxx.jpg
      JJ = Jahr
      MM = Monat
      TT = Tag
      xx = laufende Nummer am Tag

      Dann liest Du das Verzeichnis einfach aus:

      //----------------------------------------------------
      function get_dirlist("DirPathAndName")
      {
        $dh=opendir("DirPathAndName");
        if ($dh)
        {
          $dirlist=array();
          while ($filename=readdir($dh))
          {
            if (is_file($filename) and substr(filename,-4)==".jpg")  // upper?
            {
              array_push($dirlist,$filename);
            }
          }
          asort($dirlist);  // oder arsort() für rückwärts
        }
        else
        {
          // ggf. globale Fehlermeldung setzen
          return false;
        }
        closedir($dh);
        return $dirlist;
      }

      Na, und dann kannst Du daraus die Links auf die Bilder generieren oder vorher noch Thumbnails bauen:

      function makethumb($picname,$thumbname,$thumbwidth)
      {
        ### hier müssen noch die anderen unterstützten Formate
        ### eingebaut werden.

      $imgdata=getimagesize($picname);         //fragen, ob es jpg ist
        if ($imgdata[2]==2)
        {
          $src_img=ImageCreatefromjpeg($picname);//Quellbild i Speicher auspacken

      $qx=imagesx($src_img);                 //Maße des Quellbides bestimmen
          $qy=imagesy($src_img);

      $tx=$thumbwidth;                       //Breite des Zielbildes festlegen
          $ty=($thumbwidth/$qx)*$qy;                     //Höhe des Zielbildes berechnen

      #$dst_img=imagecreate($tx,$ty);         //Zielbild im Speicher vorbereiten
          $dst_img=imagecreateTrueColor($tx,$ty); //neue Funktion benutzen  ab 4.2.x
                                                 //Zielbild erzeugen
          imagecopyresized($dst_img,$src_img,0,0,0,0,$tx,$ty,$qx,$qy);

      imagejpeg($dst_img,$thumbname);        //Zielbild speichern
          imagedestroy($src_img);                //Arbeitsspeicher für Arbeits-
          imagedestroy($dst_img);                //kopien der Bilder freigeben.
        }
        else
        {
          $errormsg = "kein JPEG-Format: $imgdata[2]<br>";
        }
        return $errormsg;
      }

      makethumb("grossesBild.jpg","thumbnail.jpg",100);

      Mit den beiden Funktionen solltest Du nun zum Ziel kommen. Du benötigst dafür eine PHP-Version > 4.2.x wegen imgcreateTruColor() .

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.