Foros del Web » Programando para Internet » PHP »

Problema al redimensionar una imagen

Estas en el tema de Problema al redimensionar una imagen en el foro de PHP en Foros del Web. Hola amigos del foro, estoy intentando redimensionar las imágenes que subo al servidor desde un formulario de datos, he intentado hacerlo con algunas librerías que ...
  #1 (permalink)  
Antiguo 03/08/2013, 04:12
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Problema al redimensionar una imagen

Hola amigos del foro, estoy intentando redimensionar las imágenes que subo al servidor desde un formulario de datos, he intentado hacerlo con algunas librerías que encontré en la red pero muchas tenían el problema de que cuando el peso de la imagen era mayor a 2 MB, se producía un error y no la subía.

Es por esto que empecé a hacer un script que me ayudara con eso, siguiendo los consejos que leí en algunos foros, deseché la función imagecreatefromjpeg() que era con la que tenía el problema del peso de la imagen y lo que intento hacer en mi script es subir la imagen, redimensionarla creando con el script la nueva imagen redimensionada de la ya subida y la original eliminarla al final.

Código PHP:
Ver original
  1. <?php
  2. class redimensionar{
  3.     public $alto;
  4.     public $ancho;
  5.     public $vieja;
  6.     public $nueva;
  7.    
  8.     public function reducir($imagen_vieja, $nombre){
  9.         if(move_uploaded_file($imagen_vieja, "images/".$nombre)){
  10.             $this->vieja = "images/".$nombre;
  11.            
  12.             list($this->ancho, $this->alto) = getimagesize($this->vieja);
  13.            
  14.             $this->nueva = imagecreatetruecolor(150, 150);
  15.    
  16.             imagecopyresampled(
  17.                 $this->nueva, $this->vieja, 0, 0, 0, 0,
  18.                 150, 150, $this->ancho, $this->alto
  19.             );
  20.            
  21.             unlink($this->vieja);
  22.            
  23.             list($nuevo_nombre, $viejo_tipo) = explode(".", $nombre);
  24.            
  25.             move_uploaded_file($this->nueva, "images/".$nuevo_nombre.".jpeg");
  26.            
  27.             return true;
  28.         }else{
  29.             echo "Error";
  30.         }
  31.     }
  32. }
  33. ?>

Y desde aquí realizo la llamada a la función del script:

Código PHP:
Ver original
  1. <?php
  2. require_once("scripts/redimensionar.php");
  3.  
  4. foreach($_FILES as $key) {
  5.     if($key['error'] == UPLOAD_ERR_OK ){
  6.         $n  = $key["name"];
  7.         $temporal = $key["tmp_name"];
  8.      
  9.         if(isset($key)){
  10.             if(file_exists("images/".$n)){
  11.                 echo "Este archivo ya existe";
  12.             }else{
  13.                 $redimension = new redimensionar();
  14.                    
  15.                 if($redimension->reducir($temporal, $n)){
  16.                     list($nom, $tip) = explode(".", $n);
  17.                 ?>
  18.                     <img src="images/<?=$nom?>.jpeg" />
  19.                 <?php
  20.                 }else{
  21.                     echo "Se produjo un error";
  22.                 }
  23.             }
  24.         }
  25.     }else{
  26.       echo $key['error'];
  27.     }
  28. }
  29. ?>

No se logra subir ni redimensionar la imagen y como resultado aparece esta alerta:

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\Prueba\scripts\redimensionar.php on line 21


Lo curioso fue que probé imprimiendo una cadena de texto cualquiera en la segunda línea de la función reducir() cada vez que se suba la imagen pero al mismo tiempo se muestra el mensaje de "Error" que supuestamente se debe mostrar cuando no se sube la imagen con move_uploaded_file(). También probé sin usar condiciones dentro de la función, es decir, que la línea de move_uploaded_file() vaya directamente y que luego se ejecute el resto del código, en ese caso se muestran más alertas:

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\Prueba\scripts\redimensionar.php on line 21

Warning: getimagesize(images/verde.jpg) [function.getimagesize]: failed to open stream: No such file or directory in C:\AppServ\www\Prueba\scripts\redimensionar.php on line 14

Warning: imagecopyresampled(): supplied argument is not a valid Image resource in C:\AppServ\www\Prueba\scripts\redimensionar.php on line 21

Warning: unlink(images/verde.jpg) [function.unlink]: No such file or directory in C:\AppServ\www\Prueba\scripts\redimensionar.php on line 23


Quizá no me de cuenta ahora del error porque ya van a ser casi las 5 am aquí y no he dormido mucho, pero aparentemente la imagen no se está subiendo al servidor y es ahí en donde no encuentro la explicación pues las instrucciones de la condición se ejecutan, con errores pero lo hacen, indicando que el proceso de subida de la imagen se realizó aunque no sea así, en un momento creí que faltaba completar la ruta para subir la imagen y le coloqué ../ adelante pero solo generó más alertas pues las carpetas está al mismo nivel, incluso me fijé en la carpeta de imágenes en el servidor si se habían subido las imágenes en todos los intentos pero no hubo éxito, solo suben cuando únicamente coloco la línea de la función move_uploaded_file() sin el resto de instrucciones y sin condiciones. Si les sirve de información, estoy con la versión 5.2.6 de PHP.

Les agradeceré mucho si me dan una mano con esto, gracias de antemano.

Etiquetas: imagenes, redimensionar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:35.