135 lines
3.9 KiB
PHP
Executable File
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;
|
|
}
|