Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/03/2012, 18:27
alff21
 
Fecha de Ingreso: marzo-2011
Ubicación: tucuman
Mensajes: 25
Antigüedad: 13 años, 1 mes
Puntos: 1
error al subir imagenes grandes

hola , saludos a todos, hace poco que estoy tratando de programar con php, lo que quise hacer es una funcion para poder subir imagenes,
mi funcion es la sigiente :

function cargarImagen($campo, $ruta, $ancho="0", $alto="0")
// campo es el nombre del input de la img, ruta es el lugar donde se cargara la img, ancho y alto es el ancho y alto de la img final
{
$errorCargar = $_FILES[$campo]["error"];

# con esto verifico si se selecciono una imagen, si se selecciono una imagen el numero de error es 1, 2 o 0
if ( $errorCargar != 4)
{

$tamanoIMG = $_FILES[$campo]["size"];
$nombreIMG = $_FILES[$campo]["name"];
$nombreIMG = str_replace(" ","",$nombreIMG);
$formatoIMG = $_FILES[$campo]["type"];

$stringConLaFoto= file_get_contents($_FILES[$campo]['tmp_name']); // conesto transformo la img en un string para poder modificarla
$original = imagecreatefromstring($stringConLaFoto); // creo una imagen a partir del string
$medidas[] = imagesx($original); // $mides[0] ANCHURA en pixeles
$medidas[] = imagesy($original); // $<img src="dw/tempImage.jpg" alt="" />mides[1] ALTURA en pixeles

// SI QUIERO SUBIR UNA IMAGEN Y ESTA YA EXISTE, ENTONCES SE CAMBIARA EL NOMBRE DE LA IMAGEN
$i="0";
while( file_exists($ruta.$nombreIMG) || $nombreIMG=="" )
{
$nombreIMG = $i.$nombreIMG;
$i++;
}

# si se paso como parametro el ancho de la img final y este es distinto al original
if( $ancho!=0 && $medidas[0] !=$ancho )
{
$finalAncho = $ancho;
}
else
{
$finalAncho = $medidas[0];
}

# si se paso como parametro el alto de la img final y este es distinto al original
if( $alto!=0 && $medidas[1] !=$alto )
{
$finalAlto = $alto;
}
else
{
$finalAlto = $medidas[1];
}

$thumb = imagecreatetruecolor($finalAncho,$finalAlto);

# segun el formato de la imagen sera como se va a guardar
switch($formatoIMG)
{
case 'image/pjpeg':
case 'image/jpeg':
imagecopyresampled($thumb,$original,0,0,0,0,$final Ancho,$finalAlto,$medidas[0],$medidas[1]);
imagejpeg($thumb,$ruta.$nombreIMG);
return $nombreIMG;
echo "La imagen fue cargada con exito.";
break;


case 'image/gif':
case 'image/png':
$colorTransparancia=imagecolortransparent($origina l);// devuelve el color usado como transparencia o -1 si no tiene transparencias
if($colorTransparancia!=-1)
{ //TIENE TRANSPARENCIA

$colorTransparente = imagecolorsforindex($original, $colorTransparancia); //devuelve un array con las componentes de lso colores RGB + alpha
$idColorTransparente = imagecolorallocatealpha($thumb, $colorTransparente['red'], $colorTransparente['green'], $colorTransparente['blue'], $colorTransparente['alpha']); // Asigna un color en una imagen retorna identificador de color o FALSO o -1 apartir de la version 5.1.3

imagefill($thumb, 0, 0, $idColorTransparente);// rellena de color desde una cordenada, en este caso todo rellenado del color que se definira como transparente
imagecolortransparent($thumb, $idColorTransparente); //Ahora definimos que en el nueva imagen el color transparente será el que hemos pintado el fondo.
}

switch ($formatoIMG)
{
case 'image/gif':
imagecopyresampled($thumb,$original,0,0,0,0,$final Ancho,$finalAlto,$medidas[0],$medidas[1]);
imagegif($thumb,$ruta.$nombreIMG);
return $nombreIMG;
break;
case 'image/png':
imagecopyresampled($thumb,$original,0,0,0,0,$final Ancho,$finalAlto,$medidas[0],$medidas[1]);
imagepng($thumb,$ruta.$nombreIMG);
return $nombreIMG;
break;
}
break;

default:
imagecopyresampled($thumb,$original,0,0,0,0,$final Ancho,$finalAlto,$medidas[0],$medidas[1]);
imagejpeg($thumb,$ruta.$nombreIMG);
return $nombreIMG;
break;
}

}
else
{
return 0;
}
}
// FIN FUNCION

con imagenes relativamente pequeñas anda todo bien , si son grandes me da un error .
otra cosa es q al subir imagenes .png no se suben bien , salen con fondo negro .
lo raro del error es q algunas veces lo da y otras eces no, cuando se tarda un cierto tiempo es q da el error , como si hubiera un limite de tiempo para subir la imagen .
disculpen que aya colocado toda la funcion , se q es muy larga , pero la pongo asi vean todo el codigo , esta funcion debuelve el nombre de la imagen y ese nombre lo almaceno en una base de datos. la funcion sirve para subir una imagen y redimensionarla.

saludos y gracias