Vorschaubilder

PHP Skript zum Erstellen von Vorschaubildern

Dieses Skript dient zum Erstellen von Vorschaubildern auf einem Webserver.
Das Skript benötigt Ausführ- und Schreibrechte.
Zusätzlich muss auf dem Webserver die GD-Bibliothek installiert sein.

<?php
// Bildtyp mit korrektem Image Loader und Saver verknüpfen
// - erleichtert das spätere Hinzufügen weiterer Typen
// - erleichtert das Lesen der Funktion
const IMAGE_HANDLERS = [
    IMAGETYPE_JPEG => [
        'load' => 'imagecreatefromjpeg',
        'save' => 'imagejpeg',
        'quality' => 100
    ],
    IMAGETYPE_PNG => [
        'load' => 'imagecreatefrompng',
        'save' => 'imagepng',
        'quality' => 0
    ],
    IMAGETYPE_GIF => [
        'load' => 'imagecreatefromgif',
        'save' => 'imagegif'
    ]
];

/**
* @param $ src - ein gültiger Dateispeicherort
* @param $ dest - ein gültiges Dateiziel
* @param $ targetWidth - gewünschte Ausgabebreite
* @param $ targetHeight - gewünschte Ausgabehöhe oder null
*/
function createThumbnail($src, $dest, $targetWidth, $targetHeight = null) {

    // 1. Lade das Bild aus dem angegebenen $ src
    // - Überprüfe, ob die Datei tatsächlich vorhanden ist
    // - Überprüfe, ob es sich um einen gültigen Bildtyp handelt
    // - Lade die Bildressource

    // erhalte den Typ des Bildes
    // Wir brauchen den Typ, um den richtigen Loader zu bestimmen
    $type = exif_imagetype($src);

    // wenn kein gültiger Typ oder kein Handler gefunden wurde -> exit
    if (!$type || !IMAGE_HANDLERS[$type]) {
        return null;
    }

    // lade das Bild mit dem richtigen Loader
    $image = call_user_func(IMAGE_HANDLERS[$type]['load'], $src);

    // kein Bild am angegebenen Ort gefunden -> beenden
    if (!$image) {
        return null;
    }

    // 2. Erstelle eine Miniaturansicht und ändern Sie die Größe des geladenen $ image
    // - Bildabmessungen abrufen
    // - Definiere die Ausgabegröße entsprechend
    // - Erstelle ein Miniaturbild basierend auf dieser Größe
    // - Alpha-Transparenz für GIFs und PNGs festlegen
    // - zeichne das letzte Miniaturbild

    // Originalbildbreite und -höhe abrufen
    $width = imagesx($image);
    $height = imagesy($image);

    // Seitenverhältnis beibehalten, wenn keine Höhe eingestellt ist
    if ($targetHeight == null) {

        // Verhältnis von Breite zu Höhe ermitteln
        $ratio = $width / $height;

        // wenn ist Hochformat
        // Verhältnis zur Skalierungshöhe verwenden, um in das Quadrat zu passen
        if ($width > $height) {
            $targetHeight = floor($targetWidth / $ratio);
        }
        // wenn ist Querformat
        // Verhältnis zur Skalierungsbreite verwenden, um in das Quadrat zu passen
        else {
            $targetHeight = $targetWidth;
            $targetWidth = floor($targetWidth * $ratio);
        }
    }

    // Erstelle eine Kopie basierend auf der berechneten Zielgröße
    $thumbnail = imagecreatetruecolor($targetWidth, $targetHeight);

    // Transparenzoptionen für GIFs und PNGs festlegen
    if ($type == IMAGETYPE_GIF || $type == IMAGETYPE_PNG) {

        // Bild transparent machen
        imagecolortransparent(
            $thumbnail,
            imagecolorallocate($thumbnail, 0, 0, 0)
        );

        // zusätzliche Einstellungen für PNGs
        if ($type == IMAGETYPE_PNG) {
            imagealphablending($thumbnail, false);
            imagesavealpha($thumbnail, true);
        }
    }

    // Kopiere das gesamte Quellbild, um das Bild zu duplizieren und die Größe zu ändern
    imagecopyresampled(
        $thumbnail,
        $image,
        0, 0, 0, 0,
        $targetWidth, $targetHeight,
        $width, $height
    );

    // 3. Speiche das $ thumbnail auf der Festplatte
    // - rufe die richtige Speichermethode auf
    // - Stelle die richtige Qualitätsstufe ein
    // speichere die doppelte Version des Bildes auf der Festplatte
    return call_user_func(
        IMAGE_HANDLERS[$type]['save'],
        $thumbnail,
        $dest,
        IMAGE_HANDLERS[$type]['quality']
    );
}
?>

Das Skript kann nun mit:

<?php
createThumbnail($original, $thumb, 160);
?>

Aufgerufen werden, um von $original ein $thumb zu erstellen. Die Angabe 160 ist die Größe in Pixel, die das Vorschaubild bekommt. Andere Werte sind zulässig.

Es sind Angaben mit und ohne Pfadangabe gültig.
Das Skript benötigt Ausführ- und Schreibrechte.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.