Buenas,
Tengo problemas con un script que hice para redimensionar "dinámicamente" las imágenes que subo desde un administrador. Funciona con JPG, GIF y PNG, pero por alguna razón, si el archivo es JPG y mide más de 1000 px (es una estimación, a 900 funciona) de lado, no muestra las imágenes.
¿Sabéis si es posible que la librería GD tenga limitaciones para la imagen a tratar? No he podido averiguar qué versión está instalada en el servidor (está desactivada la función "phpinfo()").
Por favor, echad un vistazo a mi código por si veis errores...
Código PHP:
<?php
/***************************************************
VARIABLES (DE PASO POR URL) QUE REQUIERE ESTE SCRIPT
$seccion: equivale en este caso al directorio en el que se almacena la imagen.
$imagen: nombre de la imagen.
$x: anchura máxima en píxeles. Es opcional.
$Y: altura máxima en píxeles. Es opcional.
****************************************************/
// Recuperar la ruta de la imagen almacenada en la base de datos.
$imagen = "img/".$_GET[seccion]."/".$_GET[imagen];
// Establecer anchura predeterminada.
if (empty($_GET[x]))
{
$max_width = 400;
}
else
{
$max_width = $_GET[x];
}
// Establecer altura predeterminada.
if (empty($_GET[y]))
{
$max_height = 400;
}
else
{
$max_height = $_GET[x];
}
// Obtener tamaños y tipo de la imagen original.
$tamanos = getimagesize("$imagen");
$original_width = $tamanos[0];
$original_height = $tamanos[1];
$width = $original_width;
$height = $original_height;
// En caso de que sea demasiado alta, fija el máximo.
if ($height > $max_height)
{
$width = ($max_height / $height) * $width;
$height = $max_height;
}
// En caso de que sea demasiado ancha, fija el máximo.
if ($width > $max_width)
{
$height = ($max_width / $width) * $height;
$width = $max_width;
}
$imagen_nueva = imagecreatetruecolor($width, $height);
$tipo = $tamanos[2];
/*
VALORES QUE DEVUELVE EL ARRAY $tamanos[2]:
1 = GIF
2 = JPG
3 = PNG
4 = SWF
5 = PSD
6 = BMP
7 = TIFF(orden de bytes intel)
8 = TIFF(orden de bytes motorola)
9 = JPC
10 = JP2
11 = JPX
12 = JB2
13 = SWC
14 = IFF
15 = WBMP
16 = XBM
*/
// OJO: la compilación de la librería GD que lleva el PHP de XXXXX no contempla el manejo de archivos GIF;
// por este motivo, se generará la miniatura de la imagen como PNG.
if ($tipo == 1)
{
$img = imagecreatefromgif($imagen);
imagecopyresampled($imagen_nueva, $img, 0, 0, 0, 0, $width, $height, $original_width, $original_height);
Header("Content-type: image/png");
imagepng($imagen_nueva);
}
elseif ($tipo == 2)
{
$img = imagecreatefromjpeg($imagen);
imagecopyresampled($imagen_nueva, $img, 0, 0, 0, 0, $width, $height, $original_width, $original_height);
Header("Content-type: image/jpeg");
imagejpeg($imagen_nueva);
}
elseif ($tipo == 3)
{
$img = imagecreatefrompng($imagen);
imagecopyresampled($imagen_nueva, $img, 0, 0, 0, 0, $width, $height, $original_width, $original_height);
Header("Content-type: image/x-png");
imagepng($imagen_nueva);
}
imagedestroy($imagen_nueva);
?>
Gracias