= 1) { $newWidth = $srcWidth; $newHeight = $srcHeight; } else { $newWidth = (int)($srcWidth * $ratio); $newHeight = (int)($srcHeight * $ratio); } $destImage = imagecreatetruecolor($newWidth, $newHeight); // Transparenz für PNG und WEBP beibehalten if ($mime == 'image/png' || $mime == 'image/webp') { imagealphablending($destImage, false); imagesavealpha($destImage, true); $transparent = imagecolorallocatealpha($destImage, 255, 255, 255, 127); imagefilledrectangle($destImage, 0, 0, $newWidth, $newHeight, $transparent); } imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $newWidth, $newHeight, $srcWidth, $srcHeight); // Thumbnail speichern switch ($mime) { case 'image/jpeg': imagejpeg($destImage, $destPath, 80); break; case 'image/png': imagepng($destImage, $destPath, 8); break; case 'image/gif': imagegif($destImage, $destPath); break; case 'image/webp': imagewebp($destImage, $destPath, 80); break; } imagedestroy($sourceImage); imagedestroy($destImage); return true; } // -- LÖSCHEN LOGIK -- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action']) && $_POST['action'] === 'delete') { $fileToDelete = basename($_POST['filename']); if (is_file($upload_verzeichnis . $fileToDelete)) { // Verschiebe Originalbild rename($upload_verzeichnis . $fileToDelete, $deleted_verzeichnis . $fileToDelete); // Verschiebe Thumbnail, falls vorhanden if (is_file($thumbnail_verzeichnis . $fileToDelete)) { rename($thumbnail_verzeichnis . $fileToDelete, $deleted_verzeichnis . 'thumb_' . $fileToDelete); } echo json_encode(['success' => true]); } else { echo json_encode(['success' => false, 'error' => 'Datei nicht gefunden.']); } exit; } // -- UPLOAD LOGIK -- if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_FILES['photos'])) { // Limit auf 15 Bilder pro Upload serverseitig prüfen if (count($_FILES['photos']['tmp_name']) > 15) { echo json_encode(['success' => false, 'error' => 'Maximal 15 Bilder auf einmal erlaubt.']); exit; } $cleanName = 'Foto'; $uploadedCount = 0; $uploadedFiles = []; // Speichert die Namen für das LocalStorage des Nutzers foreach ($_FILES['photos']['tmp_name'] as $key => $tmpName) { if ($tmpName != "") { $extension = strtolower(pathinfo($_FILES['photos']['name'][$key], PATHINFO_EXTENSION)); $newName = $cleanName . '_' . time() . '_' . substr(md5(uniqid()), 0, 6) . '.' . $extension; $destination = $upload_verzeichnis . $newName; $thumbDestination = $thumbnail_verzeichnis . $newName; if (move_uploaded_file($tmpName, $destination)) { $uploadedCount++; $uploadedFiles[] = $newName; // Erstelle Thumbnail (jetzt mit Rotationskorrektur) createThumbnail($destination, $thumbDestination); } } } echo json_encode([ 'success' => true, 'count' => $uploadedCount, 'newTotal' => get_image_count($upload_verzeichnis), 'uploadedFiles' => $uploadedFiles ]); exit; } $current_count = get_image_count($upload_verzeichnis); // Bilder für die Galerie laden (nur die neuesten 30) $gallery_images = []; if (is_dir($upload_verzeichnis)) { $files = scandir($upload_verzeichnis); $valid_files = []; foreach ($files as $f) { if (is_file($upload_verzeichnis . $f) && !str_starts_with($f, '.')) { $valid_files[] = $f; } } // ZUVERLÄSSIGE SORTIERUNG: Alphabetisch absteigend, da Dateiname = Zeitstempel rsort($valid_files); $gallery_images = array_slice($valid_files, 0, 30); } ?> Fotobox - <?php echo $brautpaar_namen; ?>

Unsere Hochzeitsgalerie
Bilder wurden geteilt
📸 Klicken zum Auswählen
oder Kamera öffnen
(Max. 15 Bilder)
Upload startet...

Vielen Dank!

Deine Bilder wurden erfolgreich zur Galerie hinzugefügt.