Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/09/2010, 16:54
Avatar de JoeLitO
JoeLitO
 
Fecha de Ingreso: febrero-2003
Ubicación: Perú
Mensajes: 202
Antigüedad: 21 años, 2 meses
Puntos: 0
redimensionar imagen

Saludos, tengo la necesidad de modificar un archivo para poder formatear una imagen segun el tamaño de la misma imagen al subirla mediante un formulario. Agradeceria mucho que me ayuden porque no puedo hacerlo.

Tengo el siguiente archivo:

subir-imagen.php
Código HTML:
<form action="validacion-de-imagen.php" method="post" enctype="multipart/form-data">
<input type="file" name="file"><br />
<input type="hidden" name="user" value="<?php echo $_SESSION['username']; ?>"><br /><br />
Nombre de imagen:<br />
<input type="text" name="heading"><br /><br />
Descripcion:<br />
<textarea rows="7" cols="30" name="description"></textarea><br /><br />
<input type="submit" name="upload" value=" Subir Imagen ">
</form> 
Y luego el archivo:

validacion-de-imagen.php [Que es el que valida el formulario]
Código PHP:
<?php
if($_SESSION['ok'] != "ok"){
    echo 
'Usted no puede hacer esto!';
}else{
if(isset(
$login_ok)) {
require 
"includes/db-connect.php";
//Get variables
$user $_POST['user'];
$title $_POST['heading'];
$description $_POST['description'];
//Revisando errores
$errors = array();
if(
$title == '' || $description == '')
{
    
$errors[] = "Usted no ha llenado el campo obligatorio";
}
//Comprobando el tamaño del archivo
$file_size $_FILES['file']['size'];
if(
$file_size 102400)
{
    
$errors[] = "El archivo es demasiado grande";
}
if(
count($errors) > 0)
{
    foreach(
$errors AS $error)
    {
        echo
'
<script type="text/javascript">
alert("'
.$error.'");
window.location="subir-imagen.php"
</script>
        '
;
    }
} else {
//Moviendo el archivo
$from $_FILES['file']['tmp_name'];
//Obtener tipo de archivo
$ext strtolower(end(explode("."$_FILES['file']['name'])));
//Comprobando si el archivo esta en formato jpg, jpeg o png
if($ext == "jpg" || $ext == "jpeg" || $ext == "png")
{
$time time();
//Renombrando el archivo
$newName $time "_" rand(11000000) . "." $ext;
//Destino del archivo
$dest "images/" $newName;
//Moviendo el archivo
move_uploaded_file($from$dest);
//Creaando thumbnail
//Obtener la función thumbnail
require "includes/function_thumbnail.php";
createthumb('images/' $newName,'images/thumbnails/tn_'.$newName,150,150);
//Agregando datos del archivo a la base de datos
$query "INSERT INTO pictures (picture, tid, picture_user, title, description) VALUES ('$newName', '$time', '$user', '$title',  '$description')";
mysql_query($query);
//Regresando a la pagina principal
echo '<meta http-equiv="refresh" content="5; url=index.php" />';
echo 
'Gracias por subir su archivo.';
echo 
'<br /><br />';
echo 
'Será redireccionado en 05 segundos...';
} else {
echo 
'<p>Ha ocurrido un error<br />reintentelo haciendo clic <a href="subir-imagen.php">aqui</a></p>';
}
}
} else {
echo 
'<p>Tienes que ingresar a tu cuenta para subir un archivo</p>';
}
$_SESSION['ok'] = "notok";
}
?>
Este segundo archivo procesa la imagen que se ha subido desde el formulario, le cambia de nombre, verifica el peso y a la vez crea un thumbnail de la misma imagen y lo guarda en su respectiva carpeta.

Hasta ahi todo bien, pero hay un detalle, cuando alguien sube uma imagen, digamos con 1000px de ancho, igual la procesa correctamente, pero al mostrarla en la web (de manera automatica) la web se desconfigura es decir, se poner de mas 1000 px debido al ancho de la imagen.

Lo que necesto hacer con la imagen (a traves del archivo de verificacion) es que al momento de empezar a procesar la imagen (verificar peso, cambiar de nombre, crear thumbnail y guardar en sus respectivas carpetas), verifique que si el ancho es superior a 500px, lo cambie como a 500px con un alto automatico y si el archivo es menor a 500px, lo deje asi nomas o sea que no le cambie el ancho y que continue con el proceso (verificar peso, cambiar de nombre, crear thumbnail y guardar en sus respectivas carpetas).

Por favor podrian ayudarme, estoy dandole vueltas varios dias y no lobro hacerlo, ya estoy al borde de la locura porque tengo que cambiar el ancho (y alto) manualmente y esta situacion me tiene loco.

Saludos y muchas gracias,

Joel