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;
}
/*
* 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.
Kommentieren