Foros del Web » Programando para Internet » PHP »

Redimensionar imágenes

Estas en el tema de Redimensionar imágenes en el foro de PHP en Foros del Web. Buenas, actualmente utilizo la siguiente función para redimensionar imágenes y así crear un tumbs de imágenes grandes: Archivo: fun_redimensionar.php Código: <?php $anchura=$_GET['anchura']; $hmax=$_GET['hmax']; $nombre=$_GET['imagen']; $datos ...
  #1 (permalink)  
Antiguo 03/01/2008, 08:46
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Redimensionar imágenes

Buenas, actualmente utilizo la siguiente función para redimensionar imágenes y así crear un tumbs de imágenes grandes:

Archivo: fun_redimensionar.php
Código:
<?php
$anchura=$_GET['anchura'];
$hmax=$_GET['hmax'];
$nombre=$_GET['imagen'];
$datos = getimagesize($nombre);
if($datos[2]==1){$img = @imagecreatefromgif($nombre);}
if($datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if($datos[2]==3){$img = @imagecreatefrompng($nombre);}
$ratio = ($datos[0] / $anchura);
$altura = ($datos[1] / $ratio);
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
$thumb = imagecreatetruecolor($anchura,$altura);
imagecopyresampled($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb);
?>
El problema es que con algunas imágenes no funciona e ignoro el motivo, esta es una de ellas:

http://www.telefonica.net/web/byethernal/DSC00171.JPG

Para mostrar la imagen utilizo lo siguiente:

Código:
<img src="fun_redimensionar.php?imagen=img/fotos/'.$directorio.'/'.$imagen_f.'" class="imagen" />
Donde $directorio es la carpeta donde se almacena el archivo e $imagen_f es DSC00171.JPG lógicamente.

¿Alguien sabe cual es el problema?

Última edición por Dude--; 06/01/2008 a las 11:58
  #2 (permalink)  
Antiguo 03/01/2008, 09:47
 
Fecha de Ingreso: julio-2005
Ubicación: Valencia
Mensajes: 16
Antigüedad: 19 años, 4 meses
Puntos: 1
Re: Redimensionar imágenes

cual es el motivo de ponerle las ' comillas?, lo mejor para saber si estan dando una url correcta es que escribas en un papel la representacion de la linea que estas generando.

<img src="fun_redimensionar.php?imagen=img/fotos/'.$directorio.'/'.$imagen_f.'" class="imagen" />

$directorio = supongodir
$imagen_f = elarchivo

fun_redimensionar.php?imagen=img/fotos/'supongodir'/'elarchivo
  #3 (permalink)  
Antiguo 03/01/2008, 10:04
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

El motivo es que la etiqueta img se devuelve dentro de un echo

Código:
echo '<td valign="top" align="center" class="n" height="'.($hmax + 20).'"><a onClick="'.$accion.'"><img src="fun_redimensionar.php?anchura='.$wmax.'&hmax='.$hmax.'&imagen=img/fotos/'.$directorio.'/'.$imagen_f.'" class="imagen" /></a>';
Pero lo puse así en el foro para simplificar la explicación.

La url es correcta, el problema es que no redimensiona bien imágenes como esa en concreto y no se porque, con el resto de imágenes de otros directorios o si paso otras imágenes distintas a ese directorio si funciona. Es algo que sucede con un conjunto de imágenes en concreto y no entiendo porque. Si pruebas el código adaptando la url a tu host o máquina local podrás reproducir el error con la imagen que proporcioné.

Gracias por tu tiempo.
  #4 (permalink)  
Antiguo 03/01/2008, 10:06
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Re: Redimensionar imágenes

Tal vez suene loco o muy descabellado, sin embargo yo he tenido problemas con archivos que tienen la extención en mayusculas, en servidores linux no es lo mismo.. Hola.jpg que Hola.JPG, podrias tratar de renombrar el archivo todo a minusculas para ver si ese es el problema y si es asi pues ya podrias renombrar en batch todos a minusculas.. ;)
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #5 (permalink)  
Antiguo 03/01/2008, 10:08
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Cita:
Iniciado por _ssx Ver Mensaje
Tal vez suene loco o muy descabellado, sin embargo yo he tenido problemas con archivos que tienen la extención en mayusculas, en servidores linux no es lo mismo.. Hola.jpg que Hola.JPG, podrias tratar de renombrar el archivo todo a minusculas para ver si ese es el problema y si es asi pues ya podrias renombrar en batch todos a minusculas.. ;)
Ya lo había probado y no es eso. Gracias de todas formas.
  #6 (permalink)  
Antiguo 03/01/2008, 13:21
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 18 años
Puntos: 1142
Re: Redimensionar imágenes

En algunas ocasiones, la explicacion mas simple... es la más acertada.

Si solo te pasa con ese archivo en concreto y con el resto de archivos del mismo formato no has experimentado ningún problema, el tema creo que esta bastante claro: El problema es la foto.

Saludos
  #7 (permalink)  
Antiguo 03/01/2008, 13:47
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Cita:
Iniciado por popobcn Ver Mensaje
En algunas ocasiones, la explicacion mas simple... es la más acertada.

Si solo te pasa con ese archivo en concreto y con el resto de archivos del mismo formato no has experimentado ningún problema, el tema creo que esta bastante claro: El problema es la foto.

Saludos
Me ocurre con un conjunto de imágenes, no solo con esa, lo que llego a entender es porque con algunas imágenes funciona y con otras si, teniendo todas la misma extensión (.jpg). He probado a cambiar las imágenes problemáticas de resolución para así comprobar que no fuera un problema de dimensiones o de tamaño del archivo y el resultado es el siguiente:

La imagen original tiene una resolución de: 3072x2304px
Si la redimensiono con photoshop a por ejemplo 1680x1050 y hago un upload la función php trabaja correctamente con la imagen y la resizea sin problemas.

Si aplico color a la imagen manteniendo la resolución original no funciona la función a pesar de que su tamaño es menor que la original (debido a que es un color uniforme que el algoritmo jpg comprime perfectamente)

Dadas estas pruebas se podría afirmar que es un problema de resoluciones, la función php no puede trabajar por encima de una determinada resolución ¿Puede ser que exista algún límite en php a la hora de trabajar con archivos en función de su resolución? Y si este existe ¿cual es? ¿y en función de que viene determinado? ¿se puede solucionar?

Última edición por Dude--; 03/01/2008 a las 13:53
  #8 (permalink)  
Antiguo 04/01/2008, 03:43
Avatar de popobcn
Moderador
 
Fecha de Ingreso: noviembre-2006
Ubicación: Cerdanyola del Vallès
Mensajes: 3.892
Antigüedad: 18 años
Puntos: 1142
Re: Redimensionar imágenes

Dude--

Puuuuf!!! Si con algunas imagenes te funciona correctamente el script y con otras no, la cosa se pone interesante... ;) A mi recientemente me pasaban "cosas extrañas" con la creacion de los thumbnails de algunos de mis archivos "grandes" .oO( Dimensiones similares a las que me comentas) y tras volverme "loco" por encontrar el error, finalmente termine cogiendo la CALCULADORA y comence a realizar las operaciones que normalmente, damos por asumidas cuando empleamos códigos de terceros (que no se si es tu caso, ojo:

Código PHP:
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;} 
En mi caso, el problema estaba justo aqui. Ya que los parametros que facilitaba ocasionaban una "división por cero"... Por lo que no tan solo me soltaban un porron de errores en la misma subida sino que además, la imagen resultante era completamente invalida.

Otra de las causas que puedo llegar a barajar, es que sea tu server el que tenga limitaciones en las subidas de los archivos por "peso" o "timeout" de ejecucion... Por lo que tiene algo más de sentido que al efectuar escalas previas de estos archivos grandes se ejecute el script sin problemas y en caso contrario, de problemas.

Si tan solo te ocurre con imagenes muy pesadas, puede que esta sea la causa.
  #9 (permalink)  
Antiguo 04/01/2008, 04:24
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Bien cojamos la calculadora a ver....

Suponemos:
$anchura = 144;
$hmax = 150;

Y la resolución de imagen siguiente:
3072x2304px

$ratio = (3072 / $anchura); // 3072/144 = 21,333333333333333333333333333333
$altura = (2304 / $ratio); // 2304/21,333333333333333333333333333333 = 108,00000000000000000000000000002

Código:
if($altura>$hmax){$anchura2=$hmax*$anchura/$altura;$altura=$hmax;$anchura=$anchura2;}
Como Altura = 108 no es mayor que hmax = 150 no se cumple el if.

¿alguien ve algo extraño? yo no :S

Cita:
Otra de las causas que puedo llegar a barajar, es que sea tu server el que tenga limitaciones en las subidas de los archivos por "peso" o "timeout" de ejecucion... Por lo que tiene algo más de sentido que al efectuar escalas previas de estos archivos grandes se ejecute el script sin problemas y en caso contrario, de problemas.
El peso del archivo no da problemas, puesto que he probado imágenes de 3072x2304px de peso 55kb y tampoco hace el resize, es por tanto la resolución el punto determinante. No le veo el sentido.

Última edición por Dude--; 04/01/2008 a las 04:33
  #10 (permalink)  
Antiguo 04/01/2008, 19:22
 
Fecha de Ingreso: noviembre-2006
Mensajes: 102
Antigüedad: 18 años
Puntos: 0
Re: Redimensionar imágenes

Seguro que aporto una tontera, peor no recuerd donde si en la página de TUNAIT te decian que un script tal funcionaba con un jpg comprimido o algo similar, si lo encuentro te lo aclaro. Pero algo debe ser el jpg comprimido mas o menos por lo cual algunos suben y otros con el mismo formato o extensión no.

PROGRESIVO si ese es el término indicado, gracias NUCKLEAR tal vez el problema sea ese.

Última edición por miczoe; 05/01/2008 a las 06:38
  #11 (permalink)  
Antiguo 04/01/2008, 19:57
Avatar de NUCKLEAR
Moderador radioactivo
 
Fecha de Ingreso: octubre-2005
Ubicación: Cordoba-Argentina
Mensajes: 5.688
Antigüedad: 19 años
Puntos: 890
Re: Redimensionar imágenes

mmm, es tema de dimensiones o de peso en la imagen, sube todas las imagenes y solo tienes problemas para redimensionar, o es que no sube y no redimensiona?
sucede unicamente con los jpg ? (sera el tipo de compresion , progresive?)
no se por que , me parece que se debe al tipo de compresion que da la camara digital.
__________________
Drupal Argentina
  #12 (permalink)  
Antiguo 04/01/2008, 20:07
Avatar de hgp147  
Fecha de Ingreso: diciembre-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 980
Antigüedad: 17 años, 10 meses
Puntos: 36
Re: Redimensionar imágenes

Hola, fijate si te sirve este código:



La variable $archivo es el nombre del archivo que se subio al servidor.



Código PHP:
<?

$destino_imagen 
"./carpeta/$archivo";



$info_imagen getimagesize("../temp/$archivo");
$alto $info_imagen[1];
$ancho $info_imagen[0];
$tipo_imagen $info_imagen[2];



$imagen_ancho 500;
$imagen_alto 500;


       
if(
$ancho $imagen_ancho OR $alto $imagen_alto){

      if((
$alto $imagen_alto) > ($ancho $imagen_ancho))
      {
            
$imagen_ancho round($ancho $imagen_alto $alto,0) ;       
      }
else
      {
            
$imagen_alto round($alto $imagen_ancho $ancho,0);   
      }
}

else 
      {
            
$imagen_alto $alto;
            
$imagen_ancho $ancho;
      }


// Imagen GIF

if($tipo_imagen == 1){

                
$imagen_nueva imagecreate($imagen_ancho$imagen_alto);
                
$imagen_vieja imagecreatefromgif("../temp/$archivo");

                
imagecopyresampled($imagen_nueva$imagen_vieja0000$imagen_ancho$imagen_alto$ancho$alto);
           if (!
imagegif($imagen_nueva$destino_imagen));

}


// Imagen JPG

if($tipo_imagen == 2){

                
$imagen_nueva imagecreatetruecolor($imagen_ancho$imagen_alto);
                
$imagen_vieja imagecreatefromjpeg("../temp/$archivo");

                
imagecopyresampled($imagen_nueva$imagen_vieja0000$imagen_ancho$imagen_alto$ancho$alto);
                if (!
imagejpeg($imagen_nueva$destino_imagen));

}


// Imagen PNG

if($tipo_imagen == 3){

                
$imagen_nueva imagecreatetruecolor($imagen_ancho$imagen_alto);
                
$imagen_vieja imagecreatefrompng("../temp/$archivo");

                
imagecopyresampled($imagen_nueva$imagen_vieja0000$imagen_ancho$imagen_alto$ancho$alto);
                if (!
imagepng($imagen_nueva$destino_imagen));

}

?>
  #13 (permalink)  
Antiguo 05/01/2008, 18:12
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Cita:
Iniciado por NUCKLEAR Ver Mensaje
mmm, es tema de dimensiones o de peso en la imagen, sube todas las imagenes y solo tienes problemas para redimensionar, o es que no sube y no redimensiona?
El upload de momento lo hago vía ftp, así que el problema es al redimensionar solamente.

Cita:
sucede unicamente con los jpg ? (sera el tipo de compresion , progresive?)
no se por que , me parece que se debe al tipo de compresion que da la camara digital.
Todas las fotos que estoy usando de momento son .jpg. He cogido una de las fotos que SI se resizea correctamente y la he reescalado a 3072x2304px, luego he guardado dos copias: una en progresivo y otra de forma standar. Ninguna de las dos fotos permite generar un tumb válido, así que nuevamente la resolución es el problema ¿por qué?

Hgp147, gracias por tu aporte, en cuanto pueda pruebo tu código a ver si arroja un poco de luz sobre tanto misterio con este "problemilla".
  #14 (permalink)  
Antiguo 15/01/2008, 12:30
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Aun no he conseguido solucionar este problema :S

up!
  #15 (permalink)  
Antiguo 15/01/2008, 14:11
Avatar de xcars  
Fecha de Ingreso: mayo-2005
Ubicación: El Salvador
Mensajes: 753
Antigüedad: 19 años, 6 meses
Puntos: 4
Re: Redimensionar imágenes

haz un readfile($imagen) y mira el encabezado de la imagen, muchas veces se pueden renombrar imagenes por ejemplo un jpg por extension gif y si solo comparas la extension no te dara un buen resultado... no he visto tu codigo asi es que si lo estas haciendo correctamente ignora mi comment, pero seria bueno que lo imprimieras o intenta abrir la imagen en un editor de texto, al inicio tendras que ver el formato realmaente..
__________________
Con Microaplicaciones puedes hacer tu tienda en línea de forma sencilla y rápida, sin costos ocultos y con mucha responsabilidad.
  #16 (permalink)  
Antiguo 15/01/2008, 16:29
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Redimensionar imágenes

Cual es el error que te da ?
Yo he probado localmente y me redimensiona, demora un seg o dos, dado que la img tiene casi 3 mb..... eso infuira en un host remoto ?

Saludos
Andres
  #17 (permalink)  
Antiguo 15/01/2008, 17:33
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Xcars no te he entendido muy bien, si puedes explicarlo de otra forma, gracias por tu tiempo por adelantado.

Andruqui ¿te funciona con imágenes de 3072x2304px? ¿con el código de mi primer post? A mi no me funciona por mucho que espere. El error que me da es simplemente que no carga la imagen, como puedes ver a continuación:
  #18 (permalink)  
Antiguo 15/01/2008, 17:45
Avatar de andruqui  
Fecha de Ingreso: agosto-2007
Mensajes: 269
Antigüedad: 17 años, 3 meses
Puntos: 2
Re: Redimensionar imágenes

Si em funciona tu codigo original.
Le cambie esto para no recibir parametros

Código PHP:
$anchura=300;
$hmax=400;
$nombre='DSC00171.JPG'
Y la imagen resultado esta aca :




Saludos
Andres
  #19 (permalink)  
Antiguo 16/01/2008, 03:34
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

No entiendo porque a ti si te funciona, he probado a eliminar los parámetros como tu pero no va, quizás sea porque mis imágenes y el archivo de redimensionar.php estan en diferentes directorios, aun así poniendo:
Código:
$nombre='http://www.midominio.org/img/fotos/directorio/nombredelarchivo.jpg';
Tampoco funciona, y de igual manera pasa si pongo:
Código:
$imagen='http://www.midominio.org/img/fotos/directorio/nombredelarchivo.jpg';
$nombre= $_GET['imagen'];
He observado que la url de la imagen que presentas redimensionada es:

http://www.andruqui.com/fdw/redimensiono.php.jpg

Sin embargo si yo elimino los parámetros y utilizo la url.php+jpg (http://www.midominio.org/fun_redimensionar.php.jpg) el servidor me devuelve el siguiente error:

The requested URL /fun_redimensionar.php.jpg was not found on this server.

Como era de esperar.

¿Podrías pegarme el código que utilizas en la etiqueta <img>? Y si puedes prueba a pasarle, al menos la direccion (colocandolo en directorios distintos evidentemente) de la imagen y su nombre, por parámetros en la url a ver si te sigue funcionando. Gracias.

Última edición por Dude--; 16/01/2008 a las 04:16
  #20 (permalink)  
Antiguo 16/01/2008, 05:17
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 17 años
Puntos: 25
Re: Redimensionar imágenes

Te recomiendo que no te mates la cabeza con lo de arriba y apliques esta clase la cual me salvo la vida con algo realmente serio lo cual era generar imágenes a base de texto con fuentes y grados X & Y con PHP sobre imágenes GIF.... te recomiendo que uses esta clase...

http://blog.myokram.info/post-redime...-gd/index.html

La hizo un amigo mio de mexico... es fácil de usar y resuelve el problema. espero que te sirva de ayuda...

ejemplo de uso:

http://ejemplos.fdw.myokram.info/redimension/

DEscargar:

http://blog.myokram.info/post-redime...k-con-php-y-gd
  #21 (permalink)  
Antiguo 16/01/2008, 08:03
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Cita:
Iniciado por eddwinpaz Ver Mensaje
Te recomiendo que no te mates la cabeza con lo de arriba y apliques esta clase la cual me salvo la vida [...]
Agradezco mucho tu aportación, pero aun así quiero entender porque falla mi código, no tiene nada que ver con tu solución (que cuando pueda miraré porque seguro que merece la pena) sino con el hecho de que me mosquea tremendamente no saber porque algo no funciona, quizás como a cualquier programador, así que seguiré rompiendo y rompiéndome tanto vuestro coco como el mio hasta que descifremos el enigma xD.

Última edición por Dude--; 16/01/2008 a las 08:21
  #22 (permalink)  
Antiguo 16/01/2008, 11:25
Avatar de _ssx  
Fecha de Ingreso: mayo-2003
Ubicación: mX
Mensajes: 683
Antigüedad: 21 años, 6 meses
Puntos: 60
Re: Redimensionar imágenes

Cita:
Iniciado por eddwinpaz Ver Mensaje
La hizo un amigo mio de mexico... es fácil de usar y resuelve el problema. espero que te sirva de ayuda...
Yo me habia quedado en que era peruano
__________________
Escribe tu código de forma que refleje, y saque a relucir,lo mejor de tu carácter personal
www.oscararzola.com/blog
Principios de un programador
  #23 (permalink)  
Antiguo 16/01/2008, 11:37
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Cambie un poco mi código, para que no dependiera de tantas variables y así poder investigar cual podría ser el problema.

Código:
<?php
	
$datos = getimagesize($imagen);
	
if($datos[2]==1){$img = @imagecreatefromgif($imagen);}
if($datos[2]==2){$img = @imagecreatefromjpeg($imagen);}
if($datos[2]==3){$img = @imagecreatefrompng($imagen);}
	
if ( $datos[0] > 1500) 
{ /* Comprobar si la anchura de la imagen es mayor de 1500px */
	$img  = @imagecreatefromjpeg('http://www.midominio.org/img/varias/sun.jpg');
}
	
$thumb = imagecreatetruecolor(200,108);
	
$final = imagecopyresampled($thumb, $img, 0, 0, 0, 0, 200, 108, $datos[0], $datos[1]);
	
if($datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if($datos[2]==2){header("Content-type: image/jpeg"); imagejpeg($thumb);}
if($datos[2]==3){header("Content-type: image/png"); imagepng($thumb);}
	
imagedestroy($thumb);
?>
La imagen sun.jpg es una pequeña imagen que puse para comprobar si había algún problema en la lectura de datos de getimagesize(). Si la anchura de la imagen ($datos[0]) es superior a 1500px en vez de intentar resizear la imagen original lo hace con la imagen sun.jpg.

La cuestión es que imágenes de $datos[0] == 3072 no entran en el if, cuando claramente deberían, lo que me sugirió que la función getimagesize() no estaba haciendo su trabajo.

En vez de utilizar la función getimagesize() en este archivo que devuelve una imagen (fun_redimensionar.php) la utilicé en otro archivo que no devuelve ninguna (index.php) simplemente para ver si leía bien la imagen; comprobé que leia los datos perfectamente (como pude verificar volcándolos con un print_r() ). Pero getimagesize() usado en "fun_redimensionar.php" ¡no funciona bien!.... por algún extraño motivo no lee las imágenes de la resolución indicada (3072x2304 o superiores), resoluciones inferiores las lee perfectamente. ¿Alguna idea del porque ocurre esto?

Última edición por Dude--; 17/01/2008 a las 05:51
  #24 (permalink)  
Antiguo 27/01/2008, 02:37
 
Fecha de Ingreso: enero-2002
Mensajes: 31
Antigüedad: 22 años, 10 meses
Puntos: 0
Re: Redimensionar imágenes

Creo que es un problema de recursos del servidor, te cuento (pase por lo mismo)

Aunque la foto sea de 3072x2304 y por ejemplo pese 300k y a simple vista no "pese" nada, en realidad el servidor procesa:

ancho 3072 x alto 2304 x resolucion 72 = 509607936 (M, si no recuerdo mal)

Yo al final opte por limitar ese dato y evitar problemas...

Código PHP:
$max_image_size "31000000";

if (
$_FILES['archivo']['size'] > $max_image_size) { $error="size"; } 
Imaginate puse 31 M y a ti esa foto te da 509 M
  #25 (permalink)  
Antiguo 27/01/2008, 03:32
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Re: Redimensionar imágenes

Cita:
haz un readfile($imagen) y mira el encabezado de la imagen, muchas veces se pueden renombrar imagenes
Es exacto lo que iba a decir aunque parece que no era el problema :|
__________________
Salu2!
  #26 (permalink)  
Antiguo 26/02/2008, 22:56
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Cita:
Iniciado por Enric Roca Ver Mensaje
Creo que es un problema de recursos del servidor, te cuento (pase por lo mismo)
Aunque la foto sea de 3072x2304 y por ejemplo pese 300k y a simple vista no "pese" nada, en realidad el servidor procesa:
ancho 3072 x alto 2304 x resolucion 72 = 509607936 (M, si no recuerdo mal)
Yo al final opte por limitar ese dato y evitar problemas...
Código PHP:
$max_image_size "31000000";
if (
$_FILES['archivo']['size'] > $max_image_size) { $error="size"; } 
Imaginate puse 31 M y a ti esa foto te da 509 M
Ya pero alguna forma tiene que haber de hacerlo porque no tiene ningún sentido, hay miles de webs que hacen resices de imágenes mucho más grandes. Ademas Andruqui dijo que mi código inicial a él le funcionaba, aunque no me explicó el asunto de la url que cito a continuación:

Cita:
Dude--
Andruqui he observado que la url de la imagen que presentas redimensionada es:

http://www.andruqui.com/fdw/redimensiono.php.jpg

Sin embargo si yo elimino los parámetros y utilizo la url.php+jpg (http://www.midominio.org/fun_redimensionar.php.jpg) el servidor me devuelve el siguiente error:

The requested URL /fun_redimensionar.php.jpg was not found on this server.

Como era de esperar.

¿Podrías pegarme el código que utilizas en la etiqueta <img>? Y si puedes prueba a pasarle, al menos la direccion (colocandolo en directorios distintos evidentemente) de la imagen y su nombre, por parámetros en la url a ver si te sigue funcionando. Gracias.
¿Alguien sabe que parámetro de php define la memoria asociada a este proceso? para checkearlo en php_info() y avanzar más sobre el tema...
  #27 (permalink)  
Antiguo 27/02/2008, 02:43
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Re: Redimensionar imágenes

ini_set("memory_limit", "64M");
memory_limit = 64M

Por cierto, la máxima lectura que obtuve
en la memoria fué de 34 Mb con la imagen
inicial. Y por cierto ... todo funciona bien.

Cita:
ancho 3072 x alto 2304 x resolucion 72 = 509607936 (M, si no recuerdo mal)
Realmente no es así.

Ancho x Alto x TipoDeImage (16, 32, 64 bits).
Un pixel en un RGBA de 32 bits (4 bytes).

3072 x 2304 x 4 = 28,311,552 Bytes

Y ese es el caso sin compresión, no son bitmaps.
Internamente no creo que la libreria GD convierta a bitmaps.

Última edición por HackmanC; 27/02/2008 a las 03:42 Razón: bmps
  #28 (permalink)  
Antiguo 27/02/2008, 06:24
Avatar de Dude--  
Fecha de Ingreso: junio-2004
Ubicación: Sevilla - España
Mensajes: 197
Antigüedad: 20 años, 5 meses
Puntos: 4
Re: Redimensionar imágenes

Ahora parece que encaja todo, el parámetro memory_limit de mi servidor esta fijado en 32mb por eso no es capaz de procesar la imagen esa que según tu consume 34mb. Voy a ver si puedo ampliarlo y con ello solucionar el maldito problema, ya os contaré :D.

Por cierto dices que la lectura que optuvistes de la imagen inicial es de 34mb y sin embargo también y cito:
Cita:
3072 x 2304 x 4 = 28,311,552 Bytes
28,311,552 Bytes que yo sepa es distinto de 34mb no?
  #29 (permalink)  
Antiguo 27/02/2008, 15:32
Avatar de HackmanC  
Fecha de Ingreso: enero-2008
Ubicación: Guatemala
Mensajes: 1.817
Antigüedad: 16 años, 9 meses
Puntos: 260
Sonrisa Re: Redimensionar imágenes

Cita:
28,311,552 Bytes que yo sepa es distinto de 34mb no?
Ok, ok, estas en lo correcto ... mis mediciones fueron las siguientes ...
(btw... en Linux Debian... )

... para medir la cantidad de memoria que esta usando un proceso
el único método que conozco y me da buen resultado es usar el comando
"ps aux" o "top -i".

Pero no estoy contando la cantidad de memoria que se usó específicamente
en los buffers de proceso de la librería GD en PHP. Estoy contando la cantidad
de memoria que usa Apache en su momento mas crítico. (PHP es cargado como
módulo, por lo tanto comparte la memoria de Apache). Hice un pequeño script
que ejecuta "top -i -d 0.5 > output" cada 0.5 segundos. El resultado en el archivo
"output" lo filtre con "grep apache2". (Descargue la página con wget 25 veces,
seguidas, eso crea 25 threads, corriendo al mismo tiempo. Lo cual no tiene
mucho sentido en mis pruebas, puesto que solo tengo 1 procesador dual core).

Por lo tanto .. la medida es lo más inexacta en el universo .. pero creo que
suficiente para saber cuanta memoria sería aconsejable poner en la línea de
configuración memory_limit.


Btw ... 8 bits = 1 byte, 1024 bytes = 1 kb, 1,048,576 bytes = 1 mb.

28,311,552 Bytes / 1,048,576 Bytes = 27 mb.

El resultado es exacto (de los resultados en top) por que Linux usa
la mayor cantidad de memoria disponible para cualquier proceso y
usa "alignment" al segmento más adecuado. En /proc tengo una
medición diferente a los 34 mb, cerca de 8 mb más, pero creo que
no es importante.

Apache .. sin correr el script PHP que mencionas ... usa 6 mb aprox.
27 mb + 6 mb = 33 mb. Aproximadamente la lectura que obtuve.

ps: Un dato interesante, es que PHP hizo "swap" al disco en un archivo
de intercambio temporal para el proceso de la imagen. (El tamaño del
archivo coincide exactamente con el tamaño de la imágen post-procesada)
me imagino que al mismo tiempo necesitas espacio en disco, suficiente
para el "temporal swap file". (No estoy hablando de la memoria virtual).

Hacer las mediciones en Windows es mucho más fácil y más exacto.
Pero... no uso Windows para eso :)

Saludos,

Última edición por HackmanC; 27/02/2008 a las 16:13 Razón: conceptos
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.
Tema Cerrado

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 21:22.