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


