Files
sistema_funcionando_lastwar/includes/get_gallery.php

135 lines
3.9 KiB
PHP
Executable File

<?php
require_once __DIR__ . '/session_check.php';
require_once __DIR__ . '/db.php';
header('Content-Type: application/json');
// Directorio donde se almacenan las imágenes
$uploadDir = __DIR__ . '/../uploads/';
$baseUrl = '/bot/uploads/';
$response = [
'success' => false,
'message' => '',
'images' => []
];
try {
// Verificar si el directorio existe
if (!is_dir($uploadDir)) {
throw new Exception('El directorio de imágenes no existe');
}
// Obtener archivos del directorio
$files = scandir($uploadDir);
$imageFiles = array_filter($files, function($file) use ($uploadDir) {
// Solo archivos de imagen
$ext = strtolower(pathinfo($file, PATHINFO_EXTENSION));
$imageExtensions = ['jpg', 'jpeg', 'png', 'gif', 'webp'];
return in_array($ext, $imageExtensions) && is_file($uploadDir . $file);
});
// Construir la respuesta con las imágenes
foreach ($imageFiles as $file) {
$filePath = $uploadDir . $file;
$fileUrl = $baseUrl . $file;
// Crear miniatura si no existe
$thumbnailPath = $uploadDir . 'thumbs/' . $file;
$thumbnailUrl = $baseUrl . 'thumbs/' . $file;
if (!file_exists($thumbnailPath)) {
// Crear directorio de miniaturas si no existe
if (!is_dir(dirname($thumbnailPath))) {
mkdir(dirname($thumbnailPath), 0755, true);
}
// Crear miniatura
createThumbnail($filePath, $thumbnailPath, 200, 200);
}
$response['images'][] = [
'name' => $file,
'url' => $fileUrl,
'thumbnail' => file_exists($thumbnailPath) ? $thumbnailUrl : $fileUrl,
'size' => filesize($filePath),
'mtime' => filemtime($filePath)
];
}
$response['success'] = true;
$response['message'] = count($response['images']) . ' imágenes encontradas';
} catch (Exception $e) {
$response['message'] = 'Error al cargar la galería: ' . $e->getMessage();
}
echo json_encode($response);
/**
* Crea una miniatura de una imagen
*/
function createThumbnail($sourcePath, $destPath, $maxWidth, $maxHeight) {
$sourceInfo = getimagesize($sourcePath);
if (!$sourceInfo) return false;
list($origWidth, $origHeight, $type) = $sourceInfo;
// Calcular nuevas dimensiones manteniendo la relación de aspecto
$ratio = $origWidth / $origHeight;
if ($maxWidth / $maxHeight > $ratio) {
$maxWidth = $maxHeight * $ratio;
} else {
$maxHeight = $maxWidth / $ratio;
}
// Crear imagen de origen
switch ($type) {
case IMAGETYPE_JPEG:
$source = imagecreatefromjpeg($sourcePath);
break;
case IMAGETYPE_PNG:
$source = imagecreatefrompng($sourcePath);
break;
case IMAGETYPE_GIF:
$source = imagecreatefromgif($sourcePath);
break;
default:
return false;
}
if (!$source) return false;
// Crear imagen de destino
$thumb = imagecreatetruecolor($maxWidth, $maxHeight);
// Preservar transparencia para PNG y GIF
if ($type == IMAGETYPE_PNG || $type == IMAGETYPE_GIF) {
imagecolortransparent($thumb, imagecolorallocatealpha($thumb, 0, 0, 0, 127));
imagealphablending($thumb, false);
imagesavealpha($thumb, true);
}
// Redimensionar
imagecopyresampled($thumb, $source, 0, 0, 0, 0, $maxWidth, $maxHeight, $origWidth, $origHeight);
// Guardar miniatura
switch ($type) {
case IMAGETYPE_JPEG:
imagejpeg($thumb, $destPath, 90);
break;
case IMAGETYPE_PNG:
imagepng($thumb, $destPath, 9);
break;
case IMAGETYPE_GIF:
imagegif($thumb, $destPath);
break;
}
// Liberar memoria
imagedestroy($source);
imagedestroy($thumb);
return true;
}