Ver Mensaje Individual
  #1 (permalink)  
Antiguo 07/06/2012, 02:15
HyperChorly
 
Fecha de Ingreso: septiembre-2008
Mensajes: 5
Antigüedad: 15 años, 7 meses
Puntos: 0
Fallo al subir imagen mediante formulario y bajar peso y tamaño

Buenas amigos, soy visitante habitual de estos foros desde hace tiempo porque me han resuelto muchisimos problemas pero esta vez no encuentro solucion al que tengo.

Os comento, tengo un formulario en el que recojo datos y unas imagenes, al recoger la imagen la reduce de tamaño, baja la calidad, borra la original y se queda con la creada. El fallo esta en que el codigo que tengo me funciona perfecto con imagenes en *.jpg pero quiero que me funcione con *.jpg, *.bmp y *.png.

Aqui teneis el codigo que recibe los datos del formulario y modifica la imagen
Código:
if (!$_FILES['imagen']['name'])
$imagen = $_SESSION['Oldimagen'];
else
{
unlink ("../images/categorias/".$_SESSION['Oldimagen']);
$tamano = $_FILES["imagen"]['size'];          /* Tamaño del archivo en bytes */   
$tipo = $_FILES["imagen"]['type'];            /* Extencion del archivo */  
$archivo = $_FILES["imagen"]['name'];         /* Nombre del archivo */     
$prefijo = substr(md5(uniqid(rand())),0,6);    /* Prefijo aleatorio */ 
  
$Proporciones_Archivo = getimagesize($_FILES["imagen"]['tmp_name']);  /* Obtencion de las proporciones del archivo */    
$Ancho = $Proporciones_Archivo[0];                                   /* Proporcion en Ancho */ 
$Alto = $Proporciones_Archivo[1];                                    /* Proporcion en Alto */ 
$Temporal_Archivo = $_FILES["imagen"]['tmp_name'];
  
$extension = explode(".",$archivo);   
$num = count($extension)-1;    
 
$name = basename($archivo,".".$extension[$num]);     /* Nombre base del archivo */    
$imagen = $name."_".$_SESSION['idcat'].".".$extension[$num];   /* Nombre real de la imagen */   
  
if ($archivo != "") {   
$ext = strtolower($extension[$num]);   
 if($ext == 'jpg' or $ext == 'bmp'or $ext == 'png'){
$destino = "../images/categorias/".$imagen;   
if (is_uploaded_file($Temporal_Archivo)){
move_uploaded_file($Temporal_Archivo, $destino);
$origen = imagecreatefromjpeg($destino);            /* Crea una imagen en base de otra imagen */
//Se define el maximo ancho y alto que tendra la imagen final
$max_ancho = 65;
$max_alto = 65;
//Ancho y alto de la imagen original
list($ancho,$alto)=getimagesize($destino);
//Se calcula ancho y alto de la imagen final
$x_ratio = $max_ancho / $ancho;
$y_ratio = $max_alto / $alto;
//Si el ancho y el alto de la imagen no superan los maximos,
//ancho final y alto final son los que tiene actualmente
if( ($ancho <= $max_ancho) && ($alto <= $max_alto) )
{//Si ancho
$ancho_final = $ancho;
$alto_final = $alto;
}
/* si proporcion horizontal*alto mayor que el alto maximo, alto final es alto por la proporcion horizontal es decir, le quitamos al ancho, la misma proporcion que le quitamos al alto */
elseif (($x_ratio * $alto) < $max_alto)
{
$alto_final = ceil($x_ratio * $alto);
$ancho_final = $max_ancho;
}
/* Igual que antes pero a la inversa*/
else
{
$ancho_final = ceil($y_ratio * $ancho);
$alto_final = $max_alto;
}
//Creamos una imagen en blanco de tamaño $ancho_final  por $alto_final .
$tmp=imagecreatetruecolor($ancho_final,$alto_final);
//Copiamos $img_original sobre la imagen que acabamos de crear en blanco ($tmp)
imagecopyresampled($tmp,$origen,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
//Se destruye variable $img_original para liberar memoria
imagedestroy($origen);
//Definimos la calidad de la imagen final
$calidad=40;
//Se crea la imagen final en el directorio indicado
imagejpeg($tmp,$destino,$calidad);
$statusi = "Archivo subido: <b>".$imagen."</b>";   
}
else {   
$statusi = "Error: No se logro subir el archivo";   
}   
}
else {   
$statusi = "Error: Solo se permiten (*.jpg,*.bmp)";   
}   
}
else {   
$statusi = "Error: Archivo no encontrada para subir al Servidor";   
}
}

Última edición por HyperChorly; 07/06/2012 a las 02:16 Razón: fallo de ortografía