A ver, tengo un problema que no sé resolver en una página que hice y que, entre otras cosas, permite subir fotos al servidor. El problema viene dado cuando subo fotos de gran tamaño (por ejemplo, hoy he probado con una de 2.5 mb). Me da el siguiente error:
Fatal error: Out of memory (allocated 32768000) (tried to allocate 8448 bytes) in /homepages/15/d225205168/htdocs/utilImagenes.php on line 48
Cuando son fotos de 500 kb (por poner un ejemplo) suben perfectamente. Además de subir, hago una redimensión. Os pongo el código que utilizo:
Código PHP:
<?php
function redimensionar_imagen($imagen, $nombre_imagen_asociada)
{
//establecemos los límites de ancho y alto
$nuevo_ancho = 900;
$nuevo_alto = 900;
//Recojo información de la imágen
$info_imagen = getimagesize($imagen);
$alto = $info_imagen[1];
$ancho = $info_imagen[0];
$tipo_imagen = $info_imagen[2];
//Determino las nuevas medidas en función de los límites
if($ancho > $nuevo_ancho OR $alto > $nuevo_alto)
{
if(($alto - $nuevo_alto) > ($ancho - $nuevo_ancho))
{
$nuevo_ancho = round($ancho * $nuevo_alto / $alto,0);
}
else
{
$nuevo_alto = round($alto * $nuevo_ancho / $ancho,0);
}
}
else //si la imagen es más pequeña que los límites la dejo igual.
{
$nuevo_alto = $alto;
$nuevo_ancho = $ancho;
}
// dependiendo del tipo de imagen tengo que usar diferentes funciones
switch ($tipo_imagen)
{
case 1: //si es gif …
$imagen_nueva = imagecreate($nuevo_ancho, $nuevo_alto);
$imagen_vieja = imagecreatefromgif($imagen);
//cambio de tamaño…
imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
if (!imagegif($imagen_nueva,$nombre_imagen_asociada))
{
return false;
}
break;
case 2: //si es jpeg …
$imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
$imagen_vieja = imagecreatefromjpeg($imagen);
//cambio de tamaño…
imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
if (!imagejpeg($imagen_nueva,$nombre_imagen_asociada))
{
return false;
}
break;
case 3: //si es png …
$imagen_nueva = imagecreatetruecolor($nuevo_ancho, $nuevo_alto);
$imagen_vieja = imagecreatefrompng($imagen);
//cambio de tamaño…
imagecopyresampled($imagen_nueva, $imagen_vieja, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
if (!imagepng($imagen_nueva,$nombre_imagen_asociada))
{
return false;
}
break;
}
return true; //si todo ha ido bien devuelve true
}
?>
Muchas gracias de antemano