echo $begrüßung;
Ich soll nicht so lange Postings erstellen, sagt die Forumssoftware, deswegen gibt es das Thumbnailerstellungsscript extra (ich hab es allerdings nur mit JPEG getestet). Es ist vorgesehen, dass dies einmalig für eine Galerie auszuführen ist. Das Thumbnail-Verzeichnis muss dazu vom Ausführenden (=Webserver) beschreibbar sein. Besser ist es, diesen Vorgang in der Entwicklungsumgebung auszuführen und die Thumbnails zusammen mit den großen Bildern hochzuladen, dann können sie wie alle anderen Dateien unter der Kennung des Users auf dem Server liegen.
<?php
#error_reporting(E_ALL);
header('Content-Type: text/plain');
// Zum Erstellen der Thumbnails nachfolgende Zeile auskommentieren,
// anschließend Kommentarzeichen wieder entfernen.
die('Forbidden');
// Aufruf des Scripts: makeThumbnails?path=galerieVerzeichnis
// Diverse Konfiguationsmöglichkeiten gibt es in common.php.
require_once 'common.php';
// Größe der Thumbnails. 105:79 = 4:3 = 640:480
define('SIZE_X', 105);
define('SIZE_Y', 79);
// Hochformat-Bilder werden nach links gedreht
if (!is_dir(REAL_GALLERY_DIRECTORY))
error('Galerie-Pfad ist kein Verzeichnis', REAL_GALLERY_DIRECTORY);
// Galerie-Basis-Pfad aus Galerie-Verzeichnis entfernen.
if (strpos(REAL_GALLERY_DIRECTORY, REAL_GALLERY_BASE_PATH) === 0)
$galleryDirectory = rtrim(substr(REAL_GALLERY_DIRECTORY, strlen(REAL_GALLERY_BASE_PATH)), '/') . '/';
else
trigger_error('Galerie-Verzeichnis außerhalb des DocumentRoot.', E_USER_ERROR);
// Wenn dieser Fehler ausgelöst wird, muss ein Zugriffsscript für die
// Bilddateien erstellt werden. Außerdem müssen einige Anpassungen bezüglich
// der Pfad-Ermittlung in diesem Script vorgenommen werden. Dies zu tun
// obliegt dem (fortgeschrittenen) Anwender.
// $galleryDirectory enthält beispielsweise default/
// Alle Dateien auf Bildinhalt testen
foreach (glob(REAL_GALLERY_DIRECTORY . '/*', GLOB_NOSORT) as $filename)
// Wenn $filename kein Bild ist, erzeugt getimagesize() neben dem vom if
// berücksichtigten Rückgabewert false auch noch eine unerwünschte
// Notice-Meldung, die mit dem Fehlerkontrolloperator @ unterdrückt wird.
if ($imageInfo = @getimagesize($filename)) {
$thumbnailFilename = REAL_GALLERY_DIRECTORY . '/' . getThumbnailFilename(basename($filename));
list($width, $height, $type) = $imageInfo;
switch ($type) {
case IMAGETYPE_JPEG:
$image = imagecreatefromjpeg($filename);
break;
case IMAGETYPE_GIF:
$image = imagecreatefromgif($filename);
break;
case IMAGETYPE_PNG:
$image = imagecreatefrompng($filename);
break;
default:
error('Unbekannter Bild-Typ', $type);
continue;
}
if ($width > $height) { // Querformat
$thumbnail = imagecreatetruecolor(SIZE_X, SIZE_Y);
imagecopyresampled($thumbnail, $image, 0, 0, 0, 0, SIZE_X, SIZE_Y, $width, $height);
} else { // Hochformat
$thumbnailH = imagecreatetruecolor(SIZE_Y, SIZE_X);
imagecopyresampled($thumbnailH, $image, 0, 0, 0, 0, SIZE_Y, SIZE_X, $width, $height);
// drehe 90° nach links
$thumbnail = imagecreatetruecolor(SIZE_X, SIZE_Y);
for ($x = 0; $x < SIZE_Y; $x++)
for ($y = 0; $y < SIZE_X; $y++)
imagesetpixel($thumbnail, $y, SIZE_Y - $x - 1,
imagecolorat($thumbnailH, $x, $y));
}
switch ($type) {
case IMAGETYPE_JPEG:
$result = imagejpeg($thumbnail, $thumbnailFilename);
break;
case IMAGETYPE_GIF:
$result = imagegif($thumbnail, $thumbnailFilename);
break;
case IMAGETYPE_PNG:
$result = imagepng($thumbnail, $thumbnailFilename);
break;
}
imagedestroy($image);
imagedestroy($thumbnail);
echo $thumbnailFilename, ($result ? " erzeugt\n" : " fehlgeschlagen\n");
flush();
}
echo "Fertig.\n";
echo "$verabschiedung $name";