Photoalbum

Dieses Thema im Forum "Webentwicklung" wurde erstellt von tesa, 14. November 2005 .

Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 14. November 2005
    nach dem ich das mit der uhr nun habe suche ich jetzt noch ne möglichkeit meine bilder die ich auf dem sever liegen habe in ein photoalbum einzubinden egal on php oder html oder weiß der teufel

    THX

    mfg tesa
     
  2. 15. November 2005
    http://www.turboalbum.com/deu/news.htm
    /\
    ||
    Viel Spasߧ
    10 für dich(kannste gut gebrauchen)
     
  3. 15. November 2005
    muh thx ich guck mir die sache mal an
     
  4. 15. November 2005
    hier ein php script, welches die bilder ausliest, vorschauen erzeugt, etc.

    // HTML Template IT aus der PEAR (pear.php.net) einbinden:
    include_once "HTML/Template/IT.php";


    class DnDGallery {

    /**
    * imagePath
    * Pfad zu den Bildern
    * @var string
    */
    var $imagePath;


    /**
    * images
    * Die Bilder im Verzeichnis
    * Jeder Eintrag im Array ist ein Dictionary mit den Keys 'type' 'path' und 'title'
    * wobei 'type' normalerweise "IMAGE" ist, 'path' der Pfad zum Bild und 'title' der Dateinamen
    * ohne Pfad (z.B. bild01.jpg)
    * @var array
    */
    var $images;

    /**
    * exif
    * Enthält die EXIF-Informationen zu Bild x, d.h.
    * exif[x] enthält die Infos zu $images[x]
    * @var array
    */
    var $exif;

    /**
    * command
    * Command, das mit $_GET['dnd_cmd'] übergeben wurde
    * @var string
    */
    var $command;

    /**
    * error
    * Fehler-Meldungen
    * @var string
    */
    var $error = "";

    /**
    * imageID
    * ID des Bildes
    * @var string
    */
    var $imageID;

    /**
    * offset
    * Offset (für die Seiten)
    * @var string
    */
    var $offset;

    /**
    * config
    * Konfigurations-Daten
    * @var string
    */
    var $config;

    /**
    * output
    * AusgabeString, der von dem Objekt zurückgeliefert wird.
    * @var string
    */
    var $output;

    /**
    * get_vars
    * das übergebene $_GET Array
    * @var array
    */
    var $get_vars;


    /**
    * DNDGallery
    * der Konstruktor der Klasse, ruft derzeit lediglich _initialize() auf.
    */
    function DnDGallery() {
    $this->_initialize();
    }

    /**
    * _initialize
    * es werden die Konfigurationsparameter gesetzt. Eine eventuell vorhandene Konfigurationsdatei
    * wird geladen und ersetzt die Werte der Standardkonfiguration.
    *
    */
    function _initialize() {

    // Zuerst die Standardwerte festlegen:
    $this->config['imagepath'] = ".";
    $this->config['thumbnail_width'] = 120;
    $this->config['thumbnail_height'] = 90;
    $this->config['mediumsize_width'] = 640;
    $this->config['mediumsize_height'] = 480;
    $this->config['mogrify'] = "/usr/bin/mogrify";
    $this->config['epeg'] = "/usr/bin/epeg";
    $this->config['gallery_rows'] = 4;
    $this->config['gallery_columns'] = 4;


    if (file_exists("dnd_gallery.ini")) {
    // Wenn Konfigurations-Datei existiert, dann benutze sie:
    $file_ini = parse_ini_file("dnd_gallery.ini");
    }

    // Dann gehe alle Einträge in $default_ini durch
    foreach ($this->config as $key=>$value) {
    if (!empty($file_ini[$key])) {
    // Wenn dieser Eintrag in der Konfigurations-Datei gesetzt wurde, dann benutze ihn:
    $this->config[$key] = $file_ini[$key];
    }
    }
    }

    /**
    * setPath
    * der Pfad zu dem Bildverzeichnis wird gesetzt
    *
    * @param string imagePath Pfad zu den Bildern
    */
    function setPath($imagePath) {
    $this->imagePath = $imagePath;
    }

    /**
    * _initPath
    * wurde kein Pfad mit setPath() übergeben, so wird der
    * Konfigurationspfad gesetzt. Existiert der gesetzte Pfad nicht,
    * so wird eine Fehlermeldung ausgegeben.
    *
    * @param string imagePath Pfad zu den Bildern
    */
    function _initPath() {
    // Der Pfad zu den Bildern:
    // Wenn $this->imagePath noch nicht gesetzt wurde (über setPath), dann erledigen wir das jetzt:
    if (empty($this->imagePath)) {
    $this->imagePath = $this->config['imagepath'];
    }

    // Pfad checken, falls es zu Fehlermeldungen kommt, diese ausgeben:
    if(!$this->_imagePathExists()) {
    $this->output = $this->showError();
    return false;
    }
    }

    /**
    * _setGet
    * es werden die Steuerungsbefehle des Objektes gesetzt.
    * Dies sind in der Regel die $_GET Werte, können aber bei
    * Einbindung in eine andere Umgebung auch von einem steuernden
    * Programm gesetzt werden.
    * Es werden direkt das Kommando, die ImageID und der Offset gesetzt.
    *
    * @param array get_vars Array mit Steuerungsbefehlen
    */
    function setGet($get_vars) {
    $this->get_vars = $get_vars;

    // Hier holen wir die wichtigesten Angaben aus $_GET
    // das Kommando:
    $this->command = $this->get_vars['dnd_cmd'];
    // die ImageID
    $this->imageID = $this->get_vars['dnd_img_id'];
    // Offset (wichtig für die Seiten der Gallery)
    $this->offset = $this->get_vars['dnd_offset'];

    }

    /**
    * execute
    *
    * Der übergebene Pfad wird initialisiert, das Verzeichnis wird nach Bidlern gescannt
    * die Exif-Informationen werden eingelesen und das gewünschte Kommando wird ausgeführt.
    *
    */
    function execute() {

    $this->_initPath();

    // Image Directory scannen
    // Dies wird hier erledigt, da wir das Array mit allen Bildern
    // auch bei Anzeige eines Bildes benötigen (für Previous / Next)
    $this->images = $this->_scanDirectory();


    // Nun werden die Kommandos behandelt:

    switch ($this->command) {

    case "show_mediumsize":
    // Seite mit dem Bild in mittlerer Größe anzeigen:
    $this->output = $this->showMediumsize($this->imageID);
    break;

    case "show_slideshow":
    // Slideshow anzeigen (Nutzt die Funktion showMediumSize)
    $this->output = $this->showMediumsize($this->imageID, TRUE);
    break;

    case "download_image":
    // Bild als Download:
    $this->output = $this->downloadImage($this->imageID);
    break;

    case "get_thumbnail":
    // Thumbnail über das Script tunneln:
    $this->output = $this->getImage($this->imageID,"thumbnail");
    break;

    case "get_mediumsize":
    // Bild mittlerer Größe über das Script tunneln:
    $this->output = $this->getImage($this->imageID,"mediumsize");
    break;

    case "show_hr_image":
    // Das hochauflösende Bild über das Thumbnail tunneln:
    $this->output = $this->getImage($this->imageID, "highres");
    break;

    default:
    // Gallery anzeigen
    $this->output = $this->showGallery($this->offset);
    break;
    }
    }

    /**
    * getOutput-Funktion
    * Gibt die Seite aus. Nicht viel dazu zu sagen
    *
    * @return string output Die HTML-Seite
    */
    function getOutput() {
    // Hier könnte man den Output nochmal durch ein Template bearbeiten,
    // der Einfachheit halber wird dies momentan nicht gemacht.
    return $this->output;
    }

    /**
    * showError-Funktion
    * Gibt einen Fehler aus. Könnte man mal später mit einem Template realisieren.
    *
    * @param string error Der Error-String
    *
    */
    function showError() {
    // Sehr simple Fehlerausgabe:
    die("ERROR: ".$this->error."<br>&nbsp;<br>Script halted.");
    }

    /**
    * _ImagePathExists-Funktion
    * Checkt den Pfad, der beim Plugin-Aufruf angegeben wurde
    * (ob er angegeben wurde und existiert)
    *
    * @return bool true, wenn der Pfad existiert, false, wenn nicht !
    */
    function _imagePathExists() {

    // Wenn der Pfad existiert, wird TRUE zurückgegeben, ansonsten FALSE.
    // Fehler werden in die Klassen-Variable $this->error geschrieben.
    if (empty($this->imagePath)) {
    $this->error.= "No Image Path supplied. Aborting.";
    return FALSE;
    }

    if (!is_dir($this->imagePath)) {
    $this->error.="The supplied Image Path does not exist: ".$this->imagePath;
    return FALSE;
    }

    // Kein Fehler, also scheint der Pfad ok zu sein.
    return TRUE;
    }

    /**
    * scanDirectory-Funktion
    * Scannt das Verzeichnis nach Bilder und schreibt die gefundenen "Items" in das
    * Array $this->images.
    *
    * @return items Die Daten der JPEGs im Verzeichnis
    */
    function _scanDirectory() {

    // Erstmal ins Verzeichnis wechseln:
    chdir($this->imagePath);

    $imageDir = opendir($this->imagePath);
    $items = array();
    $i = 0;

    // Dann alle Einträge durchgehen:
    // (Man beachte das "!==", prüft neben Inhalt auch den Typ der Variable.
    // Somit wird genau dann abgebrochen, wenn $entry vom Typ boolean ist und FALSE enthält.)
    while( ($entry = readdir($imageDir))!== FALSE ) {

    if (is_file($entry)) {
    // Wir nutzen pathinfo, um den Pfad zum Bild zu zerlegen:
    $path_parts = pathinfo($entry);
    // Nur wenn der Eintrag wirklich eine Datei ist:
    $ext = strtolower($path_parts['extension']);

    if ( ($ext == "jpg") || ($ext == "jpeg") ) {
    // Nur wenn die Extension auf ein JPEG hinweist:
    // Für späteren Gebrauch: type
    $item['type'] = "IMAGE";
    // Der Pfad zum Bild:
    $item['path'] = $path_parts['dirname']."/".$entry;
    // Den Dateinamen in title abspeichern:
    $item['title'] = $entry;
    $items[$i] = $item;
    $i++;
    }
    }
    }
    closedir($imageDir);
    // Informationen über alle Bilder im Verzeichnis zurückgeben:
    return $items;
    }

    /**
    * readExifInformation-Funktion
    * Geht das $this->images Array durch und liest die EXIF-Information aus den Bildern
    * (falls welche da sind). Die EXIF-Information (Array) werden dann zurückgegeben.
    * Die EXIF-Daten zu Bild $this->images[x] liegen an Stelle $exifdata[x]
    *
    * @return array Exif-Daten
    *
    */
    function _readExifInformation($start, $stop) {

    if (!function_exists("exif_read_data")) return;

    $exifdata = array();
    // Array der Bildinformationen durchgehen:
    for($i=$start; $i<$stop; $i++) {
    if ( ($i >= 0) && ($i < count($this->images)) ) {
    $imagepath = $this->images[$i]['path'];
    // EXIF-Daten auslesen:
    $exif = exif_read_data($imagepath);
    // Und an EXIF-Array anhängen:
    $exifdata[$i] = $exif;
    }
    }
    return $exifdata;
    }

    /**
    * showGallery-Funktion
    * Erstellt die Gallery
    *
    * @param int offset Offset (für Pages)
    * @return string view Die Gallery-Ansicht
    */
    function showGallery($offset = 0) {

    // Ersteinmal pruefen wir den Offset:

    if ($offset < 0) $offset = 0;
    if ($offset > (count($this->images)-1)) $offset = (count($this->images)-1);

    // Die Bildinformationen:
    $images = $this->images;

    if (count ($images) < 1) {
    $this->error.="No Images to display.";
    $this->showError();
    exit();
    }
    // Einige Variablen berechnen:
    $imagesPerPage = $this->config['gallery_rows'] * $this->config['gallery_columns'];
    if ($imagesPerPage < 1) $imagesPerPage = 1;
    $pages = ceil( ( count($images) / $imagesPerPage) );

    $current_page = ($offset / $imagesPerPage) + 1;
    $prev_offset = $offset - $imagesPerPage;

    // "Previous" am Anfang der Seiten muß gesondert behandelt werden:
    if ($prev_offset < 0) $prev_offset = ($pages-1) * $imagesPerPage;

    $url = "$PHPSELF?dnd_cmd=show_gallery&dnd_offset=".$prev_offset;
    $previouspage = $url;

    // Die Seiten-Links (1 2 3 ...) zusammenstellen:
    for ($i=0; $i < $pages; $i++) {
    $link_offset = ($i*$imagesPerPage);
    $url = "$PHPSELF?dnd_cmd=show_gallery&dnd_offset=".$link_offset;
    $pagelinks.= "<a href='".$url."'>".($i+1)."</a> ";
    }

    $next_offset = $offset + $imagesPerPage;

    // "Next" am Ende der Seiten muß gesondert behandelt werden:
    if ($next_offset > count($images)) $next_offset = 0;

    $nextpage = "$PHPSELF?dnd_cmd=show_gallery&dnd_offset=".$next_offset;

    // Hier wird ein Objekt der Klasse HTML_Template_IT (aus der Pear) instanziert
    $template = & new HTML_Template_IT();
    // und das entsprechende Template übergeben. (Siehe Funktion "_getTemplate" und "_getDefaultTemplate")
    $template->setTemplate($this->_getTemplate("gallery"));

    $i=0;

    // Setze den Offset, wenn $offset leer ist, setze den counter auf 0
    if (!empty($offset)) { $counter = $offset;} else {$counter = 0;}

    // EXIF-Informationen einlesen (nur für die Bilder, die gerade angezeigt werden.
    $this->exif = $this->_readExifInformation($counter, $imagesPerPage);

    // Zwei Schleifen: eine für die Reihen und eine für die Spalten
    for ($i = 0; $i < $this->config['gallery_rows']; $i++) {
    for ($j=0; $j < $this->config['gallery_columns']; $j++) {
    // Nur wenn noch Bilder zu bearbeiten sind:
    if ($counter < count($images)) {
    // Hier werden die entsprechenden Platzhalten im Template mit den Bild-Daten gefüllt:
    $imageSRC = "$PHPSELF?dnd_cmd=get_thumbnail&dnd_img_id=".$counter;
    $imageHREF = "$PHPSELF?dnd_cmd=show_mediumsize&dnd_img_id=".$counter."&dnd_offset=".$offset;
    $imageHREF_Highres = "$PHPSELF?dnd_cmd=show_hr_image&dnd_img_id=".$counter;

    $template->setCurrentBlock("cell");
    $template->setVariable("IMAGE_HREF", $imageHREF);
    $template->setVariable("IMAGE_HREF_HIGHRES", $imageHREF_Highres);
    $template->setVariable("IMAGE_SRC", $imageSRC);

    $ifname = $images[$counter]['title'];
    $ifname_noext = substr($ifname, 0, strrpos($ifname, '.'));
    $template->setVariable("FILENAME", $ifname);
    $template->setVariable("FILENAME_NOEXT", $ifname_noext);

    $this->_setGeneralVars($template, $counter);

    $template->parseCurrentBlock("cell");
    $counter++;
    } else {
    $template->touchBlock("empty_cell");
    }
    }
    $template->setCurrentBlock("row");
    $template->parseCurrentBlock("row");
    }
    $template->setCurrentBlock("view");

    // Hier nun noch einige Links zur Steuerung:
    $start_show = "$PHPSELF?dnd_cmd=show_slideshow&dnd_img_id=0";
    $template->setVariable("START_SLIDESHOW", $start_show);
    $template->setVariable("CURRENTPAGE", $current_page);
    $template->setVariable("IMAGECOUNT", count($images));
    $template->setVariable("PAGES", $pages);
    $template->setVariable("PAGELINKS", $pagelinks);
    $template->setVariable("PREVIOUS_PAGE", $previouspage);
    $template->setVariable("NEXT_PAGE", $nextpage);
    $template->parseCurrentBlock("view");
    $view = $template->get();
    $template->free();
    return $view;
    }

    /**
    * _setGeneralVars
    * hier wurden einfach die Platzhaltersetzungen zusammengefasst, die
    * an mehreren Stellen ersetzte werden sollen.
    *
    * @param reference template Referenz auf ein HTML_Template_IT Object
    * @param int counter Nummer des aktuellen Bildes
    */
    function _setGeneralVars(&$template, $counter)
    {
    // Suchen wir nun die (optionale) Beschreibungs-Datei (Bildname, aber statt z.B. "jpg" mit Extension "html")
    $fn = $this->images[$counter]['path'];
    $noExt = substr($fn, 0, strrpos($fn, '.'));
    $df = $noExt.".html";

    if (is_file($df)) {
    $dtext = $this->importFile($df);
    } else {
    $dtext = "&nbsp;";
    }

    $template->setVariable("DESCRIPTION", $dtext);
    // Beschreibung Ende

    // Nun die EXIF informationen:
    $exif = $this->exif[$counter];

    $template->setVariable("EXIF_DATETIMEORIGINAL", $exif['DateTimeOriginal']);
    $template->setVariable("EXIF_ISOSPEEDRATINGS", $exif['ISOSpeedRatings']);

    $template->setVariable("EXIF_EXPOSURETIME", $exif['ExposureTime']);
    $template->setVariable("EXIF_FLASH", $exif['Flash']);

    $template->setVariable("EXIF_METERINGMODE", $exif['MeteringMode']);
    $template->setVariable("EXIF_MAKE", $exif['Make']);

    $template->setVariable("EXIF_MODEL", $exif['Model']);

    // Filename and Image name
    $title = $this->images[$counter]['title'];
    $title_noext = substr($title, 0, strrpos($title, '.'));
    $template->setVariable("FILENAME", $title);
    $template->setVariable("FILENAME_NOEXT",$title_noext);
    }


    /**
    * showMediumSize-Funktion
    * Erstellt die MediumSize-Ansicht
    *
    * @param int imageID Die ID des gewählten Bildes
    * @param boolean slidshow Legt fest, ob eine Slideshow angezeigt wird oder nicht. FALSE ist Default-Wert
    * @return string view Die Mediumsize-Ansicht
    */
    function showMediumSize($imageID, $slideshow = FALSE) {

    // EXIF-Informationen einlesen (nur für das Bild, das gerade angezeigt wird).
    $this->exif = $this->_readExifInformation($imageID,$imageID+1);

    $src = "$PHPSELF?dnd_cmd=get_mediumsize&dnd_img_id=".$imageID;

    $template = & new HTML_Template_IT();

    if (!$slideshow) {
    $template->setTemplate($this->_getTemplate("mediumsize"));
    } else {
    $template->setTemplate($this->_getTemplate("slideshow"));
    }

    $prevID = $imageID - 1;
    $nextID = $imageID + 1;
    if ($imageID == 0) {
    // First Image
    $prevID = count($this->images) - 1;
    $nextID = $imageID +1;
    }

    if ($imageID == (count($this->images)-1)) {
    $prevID = $imageID -1;
    $nextID = 0;
    }

    if (!$slideshow) {
    $prev = "$PHPSELF?dnd_cmd=show_mediumsize&dnd_img_id=".$prevID;
    $next = "$PHPSELF?dnd_cmd=show_mediumsize&dnd_img_id=".$nextID;
    } else {
    $prev = "$PHPSELF?dnd_cmd=show_slideshow&dnd_img_id=".$prevID;
    $next = "$PHPSELF?dnd_cmd=show_slideshow&dnd_img_id=".$nextID;

    $stop_show = "$PHPSELF?dnd_cmd=show_mediumsize&dnd_img_id=".$imageID;
    $template->setVariable("STOP_SLIDESHOW",$stop_show);
    }

    $gallery = "$PHPSELF?dnd_cmd=show_gallery&dnd_offset=".$this->offset;

    $template->setVariable("MEDIUMSIZE_SRC", $src);
    $template->setVariable("PREVIOUS_IMAGE", $prev);
    $template->setVariable("NEXT_IMAGE", $next);
    $template->setVariable("GALLERY_OVERVIEW", $gallery);

    $this->_setGeneralVars($template, $imageID);

    $downloadURL = "$PHPSELF?dnd_cmd=download_image&dnd_img_id=".$imageID;
    $template->setVariable("DOWNLOAD", $downloadURL);

    $hrviewURL = "$PHPSELF?dnd_cmd=show_hr_image&dnd_img_id=".$imageID;
    $template->setVariable("HRVIEW", $hrviewURL);

    $template->setVariable("ALL_EXIF_INFORMATION",$all_exif);

    if (!$slideshow) {
    $start_show = "$PHPSELF?dnd_cmd=show_slideshow&dnd_img_id=".$imageID;
    $template->setVariable("START_SLIDESHOW",$start_show);
    }

    $template->setCurrentBlock("view");
    $template->parseCurrentBlock("view");
    $view = $template->get();
    $template->free();
    return $view;
    }

    /**
    * getImage-Funktion
    * Gibt das Thumbnail- bzw. Mediumsize-Bild zurück
    *
    * @param int imageID Die ID des gewählten Bildes
    * @param string type Der gewünschte Typ
    * @return image image Das Bild
    */
    function getImage($imageID, $type="thumbnail") {

    // Wenn Type Highres ist, können wir sofort das Bild zurückgeben:

    if ($type == "highres") {
    $imagePath = $this->images[$imageID]['path'];
    header( "Content-type: image/jpeg" );
    $image = readfile($imagePath);
    exit();
    }

    // Ansonsten müssen wir uns erst um den korrekten Pfad kümmmern
    // und ggf. Thumbnails bzw. Mediumsize-Bilder erstellen.

    $imagePath = $this->images[$imageID]['path'];

    $path_parts = pathinfo($imagePath);
    $filename = $path_parts['basename'];
    $path = $path_parts['dirname'];

    // Falls $type "thumbnail" ist:
    if ($type == "thumbnail") {
    $file = $path."/dnd_thumbnails/".$filename;
    }
    // Falls $type "mediumsize" ist:
    if ($type == "mediumsize") {
    $file = $path."/dnd_mediumsize/".$filename;
    }

    // Wenn $file leer ist: Fehler!
    if (empty($file)) die();

    if (!is_file($file)) {
    if ($type == "mediumsize") {
    $this->createImageFromHighres($imagePath,"mediumsize");
    // Nochmal prüfen, ob die Datei da ist, wenn nicht: Fehler!
    if (!is_file($file)) {
    die();
    }
    }
    if ($type == "thumbnail") {
    $this->createImageFromHighres($imagePath,"thumbnail");
    // Nochmal prüfen, ob die Datei da ist, wenn nicht: Fehler!
    if (!is_file($file)) {
    die();
    }
    }
    }

    header( "Content-type: image/jpeg" );
    $image = readfile($file);

    exit();
    }

    /**
    * createImageFromHighres
    * Funktion zur Generierung der Thumbnails und Vorschaubilder
    *
    * @param string image das Bild
    * @param string type Der gewünschte Typ
    */
    function createImageFromHighres($image, $type="thumbnail") {

    $path_parts = pathinfo($image);
    $filename = $path_parts['basename'];
    $path = $path_parts['dirname'];
    $size = getimagesize($image);

    // Fuer Thumbnail:
    if ($type == "thumbnail") {
    // Verzeichnisse erstellen, falls nicht vorhanden
    if (!is_dir($path."/dnd_thumbnails/")) {
    mkdir($path."/dnd_thumbnails/");
    }
    $im_filename = $path."/dnd_thumbnails/".$filename;
    $width = $this->config['thumbnail_width'];
    $height = $this->config['thumbnail_height'];
    }

    // Für Mediumsize:
    if ($type == "mediumsize") {
    // Verzeichnisse erstellen, falls nicht vorhanden:
    if (!is_dir($path."/dnd_mediumsize/")) {
    mkdir($path."/dnd_mediumsize/");
    }
    $im_filename = $path."/dnd_mediumsize/".$filename;
    $width = $this->config['mediumsize_width'];
    $height = $this->config['mediumsize_height'];
    }

    $aspectRatio = $size[1] / $size[0];
    $iw = $width;
    $ih = $height;

    // Setze ersteinmal ih auf die eingestellte Thumbnail-Breite * aspectRatio
    // und iw auf die gewünschte Thumbnail-Breite
    $ih = $width * $aspectRatio;
    $iw = $width;

    // Sollte ih jetzt höher sein als die voreingestellte Thumbnail-Höhe,
    // setze iw auf die eingestellte Thumbnail-Höhe / aspectRatio
    // und ih auf die gewünschte Thumbnail-Höhe.
    // Damit ist das Thumbnail in die Bounding Box width x height eingepasst.
    if ($ih > $height) {
    $iw = $height / $aspectRatio;
    $ih = $height;
    }

    // Nur JPEGS werden hier verarbeitet
    $type = $size[2];

    if ($type != 2) return;

    // Entweder wir verwenden epeg, mogrify (Image Magic) oder GD fuer das Erstellen der kleineren Bild-Versionen
    // Erst pruefen wir, ob epeg da ist. Falls nicht, wird nach mogrify Ausschau gehalten.
    // Wenn das auch nicht da ist, nehmen wir - sozusagen als Fallback - die GD-Funktionen.
    // Epeg ist aufgrund seiner ueberragenden Geschwindigkeit auf jeden Fall zu bevorzugen.
    // Allerdings muss man dazu epeg (in der angepassten Version!) auf dem Server installieren koennen, was leider
    // meist nicht der Fall ist.

    if (is_file($this->config['epeg'])) {
    $command = $this->config['epeg']." ".$image." ".$im_filename." ".$iw." ".$ih;
    exec($command);
    } else if (is_file($this->config['mogrify'])) {
    copy($image,$im_filename);

    $command = $this->config['mogrify']." -resize ".$width."x".$height." ".$im_filename;
    exec($command);

    } else {

    $srcImage = imagecreatefromjpeg($image);
    $destImage = imageCreateTrueColor($iw,$ih);

    imageAntiAlias($destImage,true);
    imagecopyresampled($destImage, $srcImage, 0, 0, 0, 0,$iw,$ih,$size[0],$size[1]);

    imageJpeg($destImage,$im_filename,100);
    }
    }

    /**
    * downloadImage-Funktion
    * Gibt das Bild zum Download zurück
    *
    * @param int imageID ID des gewählten Bildes
    * @return image Das Bild
    */
    function downloadImage($imageID) {

    //(if ($imageID == 0) die();
    // Construct path
    $imagePath = $this->images[$imageID]['path'];

    if (!is_file($imagePath)) {
    die();
    }

    header("Content-disposition: attachment; filename=\"".$this->images[$imageID]['title']."\"");
    header("Content-type: application/DnDGallery-picture");
    header("Content-length: ".filesize("$imagePath"));
    header("Expires: 0");

    $image = readfile($imagePath);
    if (empty($image)) die();
    return $image;
    }

    /**
    * getTemplate-Funktion
    * Prüft, ob ein Template mit dem Dateinamen dnd_ + $templateName + .html im aktuellen
    * Verzeichnis vorhanden ist.
    * Wenn ja, wird es verwendet. Andernfalls wird das im Script vorhandene Default-Template
    * benutzt.
    *
    * @param string $templateName Name des Templates
    * @return string Das Template
    */
    function _getTemplate($templateName) {

    if (empty($templateName)) return;
    $pathparts = pathinfo($_SERVER['SCRIPT_FILENAME']);
    $dir = $pathparts['dirname'];

    if (file_exists($dir."/dnd_".$templateName.".html")) {
    return $this->importFile($dir."/dnd_".$templateName.".html");
    } else {
    return $this->_getDefaultTemplate($templateName);
    }
    }

    /**
    * importFile-Funktion
    * Liest den Inhalt einer Datei ein und gibt ihn als String zurück
    *
    * @param string file Pfad zur Datei
    * @return string Textinhalt der geladenen Datei
    */
    function importFile($file)
    {
    // @ vor dem Befehl: PHP soll bei diesem Befehl evtl. Fehlermeldungen unterdrücken
    // Ohne @ würde das Script hier bei einem Fehler abbrechen.
    $fileopen = @fopen($file,"r");
    if (!$fileopen)
    {
    // Keine Datei da: FALSE zurückgeben
    return FALSE;
    }
    // Ansonsten: Inhalt der Datei einlesen
    $file_data = @fread($fileopen, filesize($file));
    // Datei schließen
    @fclose($fileopen);

    return $file_data;
    }

    // STANDARD-TEMPLATES
    // ----------------------------------------------------------------------------------------------------------
    // ----------------------------------------------------------------------------------------------------------

    /**
    * getDefaultTemplate-Funktion
    * Gibt das Default-Template zurück.
    * Somit bedarf es keiner zusätzlichen Template-Dateien.
    * (Einbindung anderer Templates ist aber möglich.)
    *
    * @param string templateName Name des Templates
    * @return string Standardtemplate
    */
    function _getDefaultTemplate($templateName) {

    if (empty($templateName)) return;

    if ($templateName == "gallery") {
    $str.="<html><head><title>Drag'n'Drop-Gallery</title></head><body>\n";
    $str.="<!-- BEGIN view -->\n";
    $str.="<style id=\"gallery\">\n";
    $str.="<!--\n";
    $str.=" body {font-family: verdana, sans-serif; font-size: 12px; color:#495B9D;}\n";
    $str.=" .exif_info {font-family: verdana, sans-serif; font-size: 12px; color:#222200;}\n";
    $str.=" .normal {font-family: verdana, sans-serif; font-size: 12px; color:#495B9D;}\n";
    $str.=" a {font-family: verdana, sans-serif; font-size: 12px; color:#aa0000; text-decoration:none;}\n";
    $str.=" a:hover {font-family: verdana, sans-serif; font-size: 12px; color:#ff0000; text-decoration:underline;}\n";
    $str.="\n";
    $str.="\n";
    $str.="-->\n";
    $str.="</style>\n";
    $str.="<center>\n";
    $str.="<table border=\"0\" cellspacing=\"3\" cellpadding=\"3\" width=\"650\" cols=\"3\" cols=\"4\">\n";
    $str.="<tr><td align='left'><div class='normal'>Displaying Page {CURRENTPAGE} of {PAGES}</div></td><td colspan='2' align='center'>{PAGELINKS}</td><td align='right'><div class='normal'>{IMAGECOUNT} Images total</div></td>\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\" colspan=\"1\" width=\"163\"><a href=\"{PREVIOUS_PAGE}\">Previous Page</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"center\" colspan=\"2\" width=\"326\"><div class=\"normal\">Displaying Page Number {CURRENTPAGE}</div></td>\n";
    $str.="<td align=\"right\" colspan=\"1\" width=\"163\"><a href=\"{NEXT_PAGE}\">Next Page</a></td>\n";
    $str.="</tr>\n";
    $str.="<!-- BEGIN row -->\n";
    $str.="<tr>\n";
    $str.="<!-- BEGIN cell -->\n";
    $str.="<td align=\"center\"><a href=\"{IMAGE_HREF}\"><img src=\"{IMAGE_SRC}\" border=\"0\"></a></td>\n";
    $str.="<!-- END cell -->\n";
    $str.="<!-- BEGIN empty_cell -->\n";
    $str.="<td>&nbsp;</td>\n";
    $str.="<!-- END empty_cell -->\n";
    $str.="</tr>\n";
    $str.="<!-- END row -->\n";
    $str.="\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\" colspan=\"1\" width=\"163\"><a href=\"{PREVIOUS_PAGE}\">Previous Page</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"center\" colspan=\"2\" width=\"326\"><div class=\"normal\"><a href=\"{START_SLIDESHOW}\">Start Slideshow</a></div></td>\n";
    $str.="<td align=\"right\" colspan=\"1\" width=\"163\"><a href=\"{NEXT_PAGE}\">Next Page</a></td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="</table>\n";
    $str.="</center>\n";
    $str.="\n";
    $str.="<!-- END view -->\n";
    $str.="</body></html>\n";

    return $str;

    }
    // ----------------------
    if ($templateName == "mediumsize") {
    $str.="<html><head><title>Drag'n'Drop-Gallery</title></head><body>\n";
    $str.="<!-- BEGIN view -->\n";
    $str.="<style id=\"gallery\">\n";
    $str.="<!--\n";
    $str.=" body {font-family: verdana, sans-serif; font-size: 12px; color:#495B9D;}\n";
    $str.=" p {font-family: verdana, sans-serif; font-size: 10px; color:#495B9D;}\n";
    $str.=" .exif_info {font-family: verdana, sans-serif; font-size: 12px; color:#222200;}\n";
    $str.=" .normal {font-family: verdana, sans-serif; font-size: 12px; color:#495B9D;}\n";
    $str.=" a {font-family: verdana, sans-serif; font-size: 12px; color:#aa0000; text-decoration:none;}\n";
    $str.=" a:hover {font-family: verdana, sans-serif; font-size: 12px; color:#ff0000; text-decoration:underline;}\n";
    $str.="\n";
    $str.="\n";
    $str.="-->\n";
    $str.="</style>\n";
    $str.="<center>\n";
    $str.="<table border=\"0\" cellspacing=\"3\" cellpadding=\"3\" width=\"650\" cols=\"3\">\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\">\n";
    $str.="<a href=\"{PREVIOUS_IMAGE}\">Previous Image</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"center\">\n";
    $str.="<a href=\"{GALLERY_OVERVIEW}\">Gallery Overview</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"right\">\n";
    $str.="<a href=\"{NEXT_IMAGE}\">Next Image</a>\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\" colspan=\"2\">\n";
    $str.="<div class=\"normal\">Slideshow not running ...</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"right\">\n";
    $str.="<a href=\"{START_SLIDESHOW}\">Start Slideshow</a>\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="</table>\n";
    $str.="<table border=\"0\" cellspacing=\"3\" cellpadding=\"3\" width=\"650\" cols=\"3\">\n";
    $str.="<tr>\n";
    $str.="<td colspan=\"3\"><center><img src=\"{MEDIUMSIZE_SRC}\" border=\"0\"></center></td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\">\n";
    $str.="<a href=\"{DOWNLOAD}\">Download this image</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"center\"><div class=\"normal\">{FILENAME_NOEXT}</div></td>\n";
    $str.="<td align=\"right\">\n";
    $str.="<a href=\"{HRVIEW}\">View High-Resolution</a>\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\" colspan=\"3\">\n";
    $str.="&nbsp;<br>\n";
    $str.="{DESCRIPTION}\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="</table>\n";
    $str.="</center>\n";
    $str.="\n";
    $str.="<!-- END view -->\n";
    $str.="</body></html>\n";
    return $str;
    }
    // ---------------------------

    // ----------------
    if ($templateName == "slideshow") {
    $str.="<html><head><title>Drag'n'Drop-Gallery</title></head><body>\n";
    $str.="<!-- BEGIN view -->\n";
    $str.="<meta http-equiv=\"refresh\" content=\"3; URL={NEXT_IMAGE}\">\n";
    $str.="<style id=\"gallery\">\n";
    $str.="<!--\n";
    $str.=" body {font-family: verdana, sans-serif; font-size: 12px; color:#495B9D;}\n";
    $str.=" p {font-family: verdana, sans-serif; font-size: 10px; color:#495B9D;}\n";
    $str.=" .exif_info {font-family: verdana, sans-serif; font-size: 12px; color:#222200;}\n";
    $str.=" .normal {font-family: verdana, sans-serif; font-size: 12px; color:#495B9D;}\n";
    $str.=" a {font-family: verdana, sans-serif; font-size: 12px; color:#aa0000; text-decoration:none;}\n";
    $str.=" a:hover {font-family: verdana, sans-serif; font-size: 12px; color:#ff0000; text-decoration:underline;}\n";
    $str.="\n";
    $str.="\n";
    $str.="-->\n";
    $str.="</style>\n";
    $str.="<center>\n";
    $str.="<table border=\"0\" cellspacing=\"3\" cellpadding=\"3\" width=\"650\" cols=\"3\">\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\">\n";
    $str.="<a href=\"{PREVIOUS_IMAGE}\">Previous Image</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"center\">\n";
    $str.="<a href=\"{GALLERY_OVERVIEW}\">Gallery Overview</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"right\">\n";
    $str.="<a href=\"{NEXT_IMAGE}\">Next Image</a>\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\" colspan=\"2\">\n";
    $str.="<div class=\"normal\">Slideshow running ...</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"right\">\n";
    $str.="<a href=\"{STOP_SLIDESHOW}\">Stop Slideshow</a>\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="</table>\n";
    $str.="<table border=\"0\" cellspacing=\"3\" cellpadding=\"3\" width=\"650\" cols=\"3\">\n";
    $str.="<tr>\n";
    $str.="<td colspan=\"3\"><center><img src=\"{MEDIUMSIZE_SRC}\" border=\"0\"></center></td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\">\n";
    $str.="<a href=\"{DOWNLOAD}\">Download this image</a>\n";
    $str.="</td>\n";
    $str.="<td align=\"center\"><div class=\"normal\">{FILENAME_NOEXT}</div></td>\n";
    $str.="<td align=\"right\">\n";
    $str.="<a href=\"{HRVIEW}\">View High-Resolution</a>\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="<tr>\n";
    $str.="<td align=\"left\" colspan=\"3\">\n";
    $str.="&nbsp;<br>\n";
    $str.="{DESCRIPTION}\n";
    $str.="</td>\n";
    $str.="</tr>\n";
    $str.="\n";
    $str.="</table>\n";
    $str.="</center>\n";
    $str.="\n";
    $str.="<!-- END view -->\n";
    $str.="</body></html>\n";
    return $str;
    }
    }

    }
    // Instanziere neues Objekt der Klasse DnDGallery
    $dd = & new DnDGallery();
    // setpath ist optional!
    // Wenn es nicht gesetzt ist, wird entweder "." (gleiches Verzeichnis wie das Script)
    // oder der Wert aus "dnd_gallery.ini" verwendet. setPath überschreibt den Wert aus dieser
    // Konfigurations-Datei!
    //$dd->setPath(".");
    $dd->setGet($_GET);
    $dd->execute();
    // Der Output der Klasse wird einfach per echo ausgeliefert.
    echo $dd->getOutput();

    ?>

    musst es nur noch ein wehnig modifizieren, d.h. mit den pfaden etc.

    viel spaß dabei
     
  5. 16. November 2005
    ach laber voll übel hat net einern nen html code mit einer script datei
     
  6. 16. November 2005
    @inf1n1ty

    Hau das mal in ein .txt rein!!

    @tesa

    Hast du PhotoShop wen ja dan noch besser...

    {bild-down: http://img145.imageshack.us/img145/3488/15qj1.th.jpg}


    {bild-down: http://img145.imageshack.us/img145/644/22gy.th.jpg}
     
  7. 16. November 2005
    jo hab ich ich guck mir das mal an thx 10 haste
     
  8. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.