Ver Mensaje Individual
  #9 (permalink)  
Antiguo 03/11/2004, 01:22
Avatar de damargon
damargon
 
Fecha de Ingreso: junio-2003
Ubicación: Madrid
Mensajes: 386
Antigüedad: 20 años, 10 meses
Puntos: 3
Información

Ok, aquí os lo pongo funcionando, seguramente que será muy mejorable, si alguien puede colaborar más podemos hacer un script realmente potente. Este código no sólo sube la imagen donde tú le digas, sino que optimiza la imagen al tamaño que tú quieras y con la calidad elegida.

Este sería el formulario en el archivo form.php:
************************************************** *
<form action="upload.php" method="post" enctype="multipart/form-data" name="form">
<input name="userfile" type="file" class="campos"></input>
</form>
<?php //Pintamos los resultados del proceso
if ($_SESSION['nueva_imagen']==true) {
echo "<br><font color=ff0000><strong>La imagen ha sido correctamente subida</strong></font>";
$_SESSION['nueva_noticia']=false;

}
if ($_SESSION['img_invalid']==true)
{
echo "<br><font color=ff0000><strong>Solo son válidas imágenes con extensión '.jpg' y '.gif'.</strong></font>";
$_SESSION['img_invalid']=false;

}
if ($_SESSION['size_invalid']==true)
{
echo "<br><font color=ff0000><strong>Las imágenes no pueden ser mayores de 300Kb, por favor, reduce la imagen en un programa de edición.</strong></font>";
$_SESSION['size_invalid']=false;
}
?>
************************************************** *

Y este el archivo upload.php:
************************************************** *
<?php
//Configuramos la ruta donde se van a guardar las imágenes.
$upload_dir = "images/";


if($_FILES['userfile'] !="") //chequeamos que el campo file del form no está vacío
{
//obtenemos los datos del archivo subido
$temp_name = $_FILES['userfile']['tmp_name'];
$file_name = $_FILES['userfile']['name'];
$file_type = $_FILES['userfile']['type'];
$file_size = $_FILES['userfile']['size'];
$result = $_FILES['userfile']['error'];
$file_path = $upload_dir.$file_name;

if($file_size>350000) //este dato lo he ido ajustando a la configuración del php de mi servidor, por que si lo pongo más grande me da error
{
$_SESSION['size_invalid']=true; //esta sesión la utilizo para pintar el mensaje de error en la página del formulario
header("Location:form.php"); //vuelvo al formulario para que elija un archivo menor
exit;
}
elseif($file_size==0)
{
exit; //si el tamaño del archivo es 0 entonces que se salga del script.
}
else
{
$result = move_uploaded_file($temp_name, $file_path); //subimos el archivo a la carpeta indicada
list($ancho, $altura, $tipo, $attr) = getimagesize("/RutaFisicaDelDominio/images/$file_name"); //extraemos los atributos físicos de la imagen

$height=(($altura*200)/$ancho); //el tamaño al que yo realizo el resize de la imagen es de 200, lo puedes modificar a tu gusto

if ($tipo==2){ //si la imagen es de tipo 2 entonces es JPG
$abc = imagecreatefromjpeg("images/$file_name"); //creamos una imagen nueva a partir de la que se menciona
$def = imagecreatetruecolor(200, $height); //creamos el marco de una imagen en blanco del tamaño referido

}
elseif ($tipo==1) //Si la imagen es de tipo 1 es GIF
{
$abc = imagecreatefromgif("images/$file_name"); //creamos una imagen nueva a partir de la que se menciona
$def = imagecreate(200, $height); //creamos el marco de una imagen en blanco del tamaño referido
}
else
{
$_SESSION['img_invalid']=true;
header("Location:form.php");
exit;
}

imagecopyresized($def, $abc, 0, 0, 0, 0, 200, $height, $ancho, $altura); //copia una porción rectangular de la imagen $abc en $def
imagejpeg($def, "images/$file_name", 85); //la imagen creada con el imagecopyresized es producida, se le da un nombre y una calidad 85%
}
}

$_SESSION['nueva_imagen']=true;
header("Location:form.php");
exit;
?>

Pues creo que eso es todo, espero que os sirva.

Saludos.


************************************************** *