Image Gallery

Die Image-Gallery ist ein simples PHP-Skript, das automatisch Bilder in einem Verzeichnis für eine (wirklich simple) Gallerie aufarbeitet. Eine Dokumentation ist momentan nicht verfügbar (sie wäre vermutlich länger als der Quellcode).

PHP:
<?php

/*
 * Imaging-Gallery
 *
 * 2004-2005 by Kai 'ganda|f' Boenke
 * kai@boenke.info
 */



//////////
// Parameters
//////////

$_gallery = array(
        "imgPerRow"          => 3,
        "rowPerPage"    => 4,
        "imgPerPage"    => (3*4)
        );
$_files = array(
        "imgPath"              => "/data/pictures/",
        "fPath"   => "/data/pictures/"
);


//////////
// Image-Functions
//////////

/*
 *      Read Image-Informations
 */

function GetImageInfo($img){
        global $_files;

        global $_files;

        if($img == ""){
                return;
        }

        $rawFile = $img;
        $filePath = $_files['fPath'];

        // Check for file
        if(!file_exists($filePath.$rawFile)){
                return;
        }

        // Get Image
        $image = ImageCreateFromJPEG($filePath.$rawFile);
        $iExif = exif_read_data($filePath.$rawFile);

        $info = array(
                "name"    => htmlentities($img),
                "handle"        => urlencode($img),
        );
        $info['exif'] = $iExif;

        // Return Info
        return $info;
}

/*
 * Stream raw-Image
 */

function ImageRaw($img){
        global $_files;

        if($img == ""){
                die("No Image given.");
        }

        $rawFile = $img;
        $filePath = $_files['fPath'];

        // Check for file
        if(!file_exists($filePath.$rawFile)){
                die("File not found.");
        }

        // Get data
        $rawImage = ImageCreateFromJPEG($filePath.$rawFile);

        // Stream image
        header("Content-type: image/jpeg");
        imagejpeg($rawImage, "", 100);
}

/*
 * Generic Image-Resizing
 */

function ResizeImage($img, $width, $height){
        global $_files;

        if($img == ""){
                die("No Image given.");
        }

        $rawFile = $img;
        $fileExtension = substr($rawFile, strrpos($rawFile, "."));
        $filePath = $_files['fPath'];

        // Check for file
        if(!file_exists($filePath.$rawFile)){
                die("File not found.");
        }

        // Get data from raw image
        $rawImage = ImageCreateFromJPEG($filePath.$rawFile);
        $rawImagesize = getimagesize($filePath.$rawFile);
        $rawWidth = $rawImagesize[0];
        $rawHeight= $rawImagesize[1];

        // Calculate new images data
        if($rawWidth>=$rawHeight){
                $newWidth = $width;
                $newHeight= floor($rawHeight / $rawWidth * $newWidth);
        }else{
                $newHeight= $height;
                $newWidth = floor($rawWidth / $rawHeight * $newHeight);
        }
        $newImage = imagecreatetruecolor($newWidth, $newHeight);

        // Generate new image
        imagecopyresized($newImage, $rawImage, 0, 0, 0, 0, $newWidth, $newHeight, $rawWidth, $rawHeight);

        // Stream new image
        header("Content-type: image/jpeg");
        imagejpeg($newImage, "", 80);
}

/*
 * Create a preview-Image
 */

function ImagePreview($img){
        ResizeImage($img, 170, 113);
}

/*
 * Create a normal-sized Image
 */

function ImageView($img){
        ResizeImage($img, 640, 480);
}


//////////
// Directory-Functions
//////////

/*
 * Generic directory-reader
 */

function GetDirectoryContent($dir){
        global $_files;
       
        if($dir == null){
                $path = $_files['fPath'];
        }else{
                $path = $_files['fPath'].$dir."/";
        }

        if($fHandle = opendir($path.'.')){
                while(false !== ($file = readdir($fHandle))){
                        if($file != "." && $file != ".."){
                                $content[] = $file;
                        }
                }
                @closedir($handle);
                return $content;
        }else{
                die("Directory not found.");
        }
}

/*
 * Show available directories
 */

function BrowseDirectory(){
        $content = GetDirectoryContent(null);

        @sort($content);
        return $content;
}

/*
 * Get images from a directory
 */

function GetImages($dir){
        $rawData = GetDirectoryContent($dir);

        foreach($rawData as $file){
                $ext = strtolower(substr($file, strrpos($file, '.')));
                if($ext == ".jpg" || $ext == ".jpeg"){
                        $content[] = $file;
                }
        }
        @sort($content);
        return $content;
}


//////////
// Gallery-Functions
//////////

/*
 * Main-Gallery-Function
 */

function CreateGallery($dir, $pos){
        global $_gallery;

        $rawImg = GetImages($dir);
        $page   = GetPageVars($rawImg, $pos);

        for($i = 0; $i <= count($rawImg); $i++){
                if($i < $pos){
                        continue;
                }elseif($i >= ($pos + $_gallery['imgPerPage'])){
                        break;
                }

                $images[] = $rawImg[$i];
        }
        while(count($images) < $_gallery['imgPerPage']){
                $images[] = false;
        }

        $gallery = array(
                "img"   => $images,
                "page"  => $page
        );
        return $gallery;
}


/*
 * Generate Page-Variables
 */

function GetPageVars($files, $pos){
        global $_gallery;


        $page['images'] = count($files);
        $page['max']    = ceil($page['images']/$_gallery['imgPerPage']);
        $page['cur']    = ceil(($pos+1)/$_gallery['imgPerPage']);

        return $page;
}

Damit das Skript funktioniert, ist die GD-Library erforderlich.