Foros del Web » Programando para Internet » PHP »

problema con el uso imagejpeg

Estas en el tema de problema con el uso imagejpeg en el foro de PHP en Foros del Web. Estoy haciendo un script en el que subo una foto y la renombro al numero siguiente a las que hay en el directorio. Después miro ...
  #1 (permalink)  
Antiguo 26/01/2011, 10:29
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
problema con el uso imagejpeg

Estoy haciendo un script en el que subo una foto y la renombro al numero siguiente a las que hay en el directorio.
Después miro su tamaño e intento redimensionar(al mismo tamaño para poder comprimirla).
Aquí me surge el problema, solo me funciona con imagenes de tamaño y/o peso limitado, es decir, con imagenes de 1500x1000 y 400kb y me funciona, pero si intento subir las que me saca la camara, 3000 x 2000(aprox) y pesan 2 mb, no me funciona, adjunto el codigo y comento cual es la sentencia exacta donde para de funcionar.
Código PHP:
Ver original
  1. <?php
  2. if (isset($_POST['submit']))
  3. {
  4.    
  5.     $ruta= "fotos/".$_FILES['fichero']['name']; // Se guardaría dentro de "fotos"
  6.                
  7.     if(is_uploaded_file($_FILES['fichero']['tmp_name']))  // verifica haya sido cargado el archivo
  8.     {
  9.         if($_FILES['fichero']['type']=="image/jpeg")  //solo permite la subida de archivos .jpg
  10.         {
  11.             if(move_uploaded_file($_FILES['fichero']['tmp_name'], $ruta)) // se coloca en su lugar final
  12.             {
  13.                 $dir = "fotos/";
  14.                 $a=0;
  15.                 if (is_dir($dir))
  16.                 {
  17.                     if ($gd = opendir($dir))
  18.                     {
  19.                         while (($archivo = readdir($gd)) !== false)
  20.                         {
  21.                             $a++; // sumo 1 al contador si hay archivo o carpeta
  22.                         }
  23.                         closedir($gd);
  24.                     }
  25.                 }
  26.                 $num=$a-3;
  27.        
  28.                 rename("fotos/".$_FILES['fichero']['name'],"fotos/".$num.".jpg"); //remonbro el archivo que nos subi
  29.                
  30.                 //echo "<b>Upload exitoso!. Datos:</b><br>";
  31.                 //echo "Nombre: <i><a href=\"".$_FILES['fichero']['name']."\">".$_FILES['fichero']['name']."</a></i><br>";
  32.                 //echo "Tipo MIME: <i>".$_FILES['fichero']['type']."</i><br>";
  33.                 //echo "Peso: <i>".$_FILES['fichero']['size']." bytes</i><br>";
  34.                 //echo "<br><hr><br>";
  35.             }
  36.         }else echo "Solo se permiten subir archivos jpg";
  37.     }else echo"Ha surgido un problema al subir la foto, intentelo mas tarde";
  38.        
  39.     //VAMOS COMPROBAR TAMAÑO, HACERLA PEQ, MEDIANA, COMPRIMIRLA...
  40.     echo $num."<br>";
  41.     list($ancho, $alto) = getimagesize("fotos/".$num.".jpg"); //devuelve el tamaño de la imagen
  42.     echo "Ancho: ".$ancho." Alto: ".$alto;
  43.    
  44.     $nombre_archivo = 'fotos/'.$num.'.jpg';
  45.  
  46.     header('Content-type: image/jpeg');
  47.    
  48.     $imagen_p = imagecreatetruecolor($ancho, $alto);
  49.    
  50.     $imagen = imagecreatefromjpeg($nombre_archivo);   //ESTA SENTENCIA NO FUNCIONA!!!!
  51.    
  52.     echo "guardar";
  53.  
  54.     imagecopyresampled($imagen_p, $imagen, 0, 0, 0, 0, $ancho, $alto, $ancho, $alto);
  55.  
  56.     //guardar
  57.     imagejpeg($imagen_p, "julio.jpg", 75);
  58.    
  59.    
  60.      if($ancho>$alto) //entonces anchoNuevo = 800 y altoNuevo= (alto/ancho)x800
  61.     {
  62.        
  63.     }
  64.     else //entonces altoNuevo=800 y anchoNuevo= (ancho/alto)x800
  65.     {
  66.        
  67.     }  
  68.    
  69. }
  70. ?>
  71.  
  72. <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" enctype="multipart/form-data">
  73.     Archivo: <input name="fichero" type="file">
  74.     <input name="submit" type="submit" value="Upload!">
  75. </form>

Mencionar que parte del codigo es copiado de otros hilos y/o de php.net

P.D. las imagenes que sean muy grandes también tengo pensado redimensionarla para que pesen menos.

P.D2: ¿si quiero mostrar imagenes en miniatura además de las imagenes grandes, me recomendais guardarlas en miniatura, o mostrarlas en tamaño pequeño modificandolo desde html?

Saludos y muchas gracias de antemano
  #2 (permalink)  
Antiguo 26/01/2011, 17:50
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema con el uso imagejpeg

El problema no es necesariamente de tu script, sino del servidor donde esta trabajando. Generalmente se asigna una limitada cantidad de recursos a PHP y/o proceso de formularios. Si sobrepasas esos limites puedes obtener una pagina en blanco y/o resultados impredecibles.

P.D: Si no puedes modificar la configuracion del servidor (Apache + PHP) entonces debes reducir las imagenes antes de subirlas.

P.D2: Es mejor crear las miniaturas y guardarlas, tanto para ti, porque se consume menos ancho de banda, como para tus visitantes, que no tardaran tanto en descargar la vista previa.
__________________
- León, Guanajuato
- GV-Foto
  #3 (permalink)  
Antiguo 27/01/2011, 15:35
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: problema con el uso imagejpeg

gracias Triby.

he probado en otro servidor y en este caso me funciona tanto con imagenes grandes como con pequeñas(+ y - pesadas), pero me da éste warning

Warning: Cannot modify header information - headers already sent by (output started at C:\xxxxxxxxxxxxxxxxxxt\pro\subir2.php:40) in C:\xxxxxxxxxxxxxxxxxx\subir2.php on line 46

la linea 46 es la cabecera que se muestra en el codigo anterior.

que tengo que modificar en el servidor para que me funcione con imagenes pesadas? es un servidor local.

lo de reducir la imagenes, que te refieres a hacerlo individualmente en local? como se puede hacer algo similar a lo que tiene facebook, que subes imagenes de 3mb y las reducen y comprimen....
  #4 (permalink)  
Antiguo 30/01/2011, 09:40
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: problema con el uso imagejpeg

Nadie me puede echar una mano??

Lo reduzco a una pregunta más pequeña/sencilla.

¿Donde y como tengo que modificar para que mi servidor local me permita subir archivos que pesen mucho, 2,3mb con los comandos de gd?

gracias
  #5 (permalink)  
Antiguo 30/01/2011, 19:34
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: problema con el uso imagejpeg

Debes modificar en php.ini los siguientes valores para memory_limit y upload_max_filesize.
__________________
- León, Guanajuato
- GV-Foto
  #6 (permalink)  
Antiguo 06/02/2011, 07:07
Avatar de julliop  
Fecha de Ingreso: septiembre-2006
Ubicación: Asturias, patria querida
Mensajes: 42
Antigüedad: 17 años, 7 meses
Puntos: 0
Respuesta: problema con el uso imagejpeg

Hola Triby.

En primer lugar gracias por la información.
2º siento haberme desconectado del hilo unos días, me han surgido unos problemillas...

3º, no he solucionado el problema, los dos valores que me mencionabas anteriormente no estaban los dos a 32M lo que me hacía pensar que ahí no estaba el problema, aún así los cambie a 64 y el error persistía.
Hice unas pruebas y el problema no es de peso, si no de tamaño. Es decir que no me funciona con imagenes grandes 3000x1500 o similares...
Quiero recordar que el mismo codigo en mi servidor de internet funciona, es mi servidor local el que no funciona, necesito que lo haga!

Saludos

EDITO: ya lo solucione, no había reiniciado el servidor...

Última edición por julliop; 06/02/2011 a las 07:26

Etiquetas: imagejpeg
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:25.