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"; } }