Foros del Web » Programando para Internet » PHP »

A alguien le suena? problemas con IMAGENES

Estas en el tema de A alguien le suena? problemas con IMAGENES en el foro de PHP en Foros del Web. Si hace falta colocare codigo o lo que se tercie... A ver... Es muy raro vereis, subo imagenen sin problema con su tamaño original. Despues ...
  #1 (permalink)  
Antiguo 15/02/2006, 14:19
Avatar de kazafun  
Fecha de Ingreso: diciembre-2003
Ubicación: Elda
Mensajes: 843
Antigüedad: 20 años, 3 meses
Puntos: 13
A alguien le suena? problemas con IMAGENES

Si hace falta colocare codigo o lo que se tercie...

A ver...

Es muy raro vereis, subo imagenen sin problema con su tamaño original. Despues para mostrarlas en la web hago uso de una funcioncita PHP que redimensiona la imagen original al tamaño que a mi me conviene (en mi caso 400x400px)

El problema: Funciona PERFECTAMENTE siempre que las imagenes no superen los ( mas o menos ) 1000x1000 pixeles de tamaño. Eso si, en tamaños de (por ejemplo) 800x1600 o 1600x800 pixeles si que me la muestra bien, aunque si la foto es un poquito mas grande no funciona bien.

Vamos que si alguien sube una foto de 2000x2000, no la redimensiona ¿Y que es lo que hace? preguntareis... Pues almacenarla: la almacena, la llamada no falla, solo que simplemente AL REDIMENSIONARLA muestra el habitual cuadradito con la X en el centro.
Esa misma foto la hago de 1000x1000 y la subo, y la funcion la redimensiona sin problema. ¿De que va esto?


Datos: el servidor solo tiene GD, no GD2 (pero vamos si que las redimensiona cuando son pequeñas)

OS SUENA ESTO?????
__________________
MUERTE a Internet Explorer


Mi portfolio de diseño web en Elda
  #2 (permalink)  
Antiguo 15/02/2006, 16:07
 
Fecha de Ingreso: mayo-2003
Ubicación: Cuernavaca, Mor.
Mensajes: 117
Antigüedad: 20 años, 11 meses
Puntos: 2
Debido a que GD 2 tiene nuevas funciones no sabre decirte, yo he trabajado con GD 2 en una galeria que no solo me redimenciona imagenes si no que incluso les pone una marca de agua de logo, en fin seria bueno ver tu codigo...
  #3 (permalink)  
Antiguo 15/02/2006, 22:37
Avatar de Watas  
Fecha de Ingreso: diciembre-2005
Ubicación: Caracas
Mensajes: 151
Antigüedad: 18 años, 4 meses
Puntos: 0
chequea a ver si en la BD la tienes como BLOB o como LONGBLOB, Blob te funciona solo hasta 64k en cambio el otro es para imagenes mayores, no se chequea eso
  #4 (permalink)  
Antiguo 16/02/2006, 03:44
Avatar de kazafun  
Fecha de Ingreso: diciembre-2003
Ubicación: Elda
Mensajes: 843
Antigüedad: 20 años, 3 meses
Puntos: 13
Las imagenes no las almaceno en una BD, sino en una carpeta, en la BD almaceno la ruta.

La funcion es esta, la encontre en internet, la modifique un poco, aunque sigue siendo un poco caotica:

Código:
<?php
    /*
        This script will create a thumbnail from $_GET[i] (image url), using 
$_GET[w] (width), $_GET[h] (height), and $_GET[adjust] (The last one only if 
both width and height are specified).
    */
    
    //Check it's only used for local images
    if(strstr($_GET['ruta'], "http://")) {
        die;
    }
    
    //Setup header
    header("Content-Type: image/jpeg");

    //Open Image according to file extension

    $ext = substr($_GET['ruta'], -3); //get extension
    
    /* Check image is in an allowed format and load it */
    
    if(strtolower($ext) == "gif") {
        if (!$src = imagecreatefromgif($_GET['ruta'])) {
            echo "Error opening $_GET[ruta]!"; exit;
        }
    } else if(strtolower($ext) == "jpg") {
        if (!$src = imagecreatefromjpeg($_GET['ruta'])) {
            echo "Error opening $_GET[ruta]!"; exit;
        }
    } else if(strtolower($ext) == "png") {
        if (!$src = imagecreatefrompng($_GET['ruta'])) {
            echo "Error opening $_GET[ruta]!"; exit;
        }
    } else {
        die;
    }

	//$sw=1;
    
    $h = $_GET['alto'];
    $w = $_GET['ancho'];        
    
    
    $size = getimagesize($_GET['ruta']);
    
    //Transform image as needed
    if($_GET[ancho] && !$_GET[alto]) {
        
        //Setup image height
        $h = $size[1]/($size[0]/$w);
        
        //Create new image
        $image = imagecreatetruecolor($w, $h);
        
        //Resize image
        imagecopyresampled($image, $src, 0, 0, 0, 0, $w, $h, $size[0], 
$size[1]);
        
    } else if($_GET[alto] && !$_GET[ancho]) {
        
        //Setup image width
        $w = $size[0]/($size[1]/$h);
        
        //Create new image
        $image = imagecreatetruecolor($w, $h);
        
        //Resize image
        imagecopyresampled($image, $src, 0, 0, 0, 0, $w, $h, $size[0], 
$size[1]);
        
    } else if($_GET['ancho'] && $_GET['alto']) {
    
        //Create new image using desired values
        $image = imagecreatetruecolor($w, $h);
        //Set white background
        $white = imagecolorallocate($image, 186, 188, 213);
        imagefill($image, 0, 0, $white);
    
      
$imgAncho = imagesx ($src); 

$imgAlto =imagesy($src); 



  if($imgAlto < $imgAncho) 
	{
            
            //Setup image height
            $newh = $size[1]/($size[0]/$w);
            
            //Setup $y
            $y = ($h-$newh)/2;
            
            //Resize image
            imagecopyresampled($image, $src, 0, $y, 0, 0, $w, $newh, $size[0], 
$size[1]);
	
         } 
  else 
	{
        
            //Setup image width
            $neww = $size[0]/($size[1]/$h);
            
            //Setup $x
            $x = ($w-$neww)/2;
            
            //Resize image
            imagecopyresampled($image, $src, $x, 0, 0, 0, $neww, $h, $size[0], 
$size[1]);
                    
        }






    
    }
    
    //Output resampled image
    imagejpeg($image, "", 90);
	
    imagedestroy($image);
    imagedestroy($src);


?>
__________________
MUERTE a Internet Explorer


Mi portfolio de diseño web en Elda
  #5 (permalink)  
Antiguo 16/02/2006, 07:04
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En principio podría ser un problema sobre el tamaño que ocupa tu imagen en memoria para procesarla .. aunque en este caso deberías obtener un bonito mensaje de error referente a eso mismo. Tal vez se esté originando pero no lo ves. PHP por lo menos asigna un tamaño máximo de bytes para ejecutar un script, también un tiempo máximo de ejecución del mismo.

Recomendaciones:

* Haz tus pruebas llamando a ese código en forma individual, (no por un tag de imagen <img src="ese script.php"> desde otro sitio como es lo normal para su uso.

* Comenta/elimina por el momento en tus pruebas las líneas referentes a header()

* Usa al principio de tu script error_reporting() ajustado al máximo nivel de errores de PHP (para verlos si los hay).

Como veras . .el objetivo que pretendemos con estas pruebas es ver algún mensaje de error. Según sea este el mensaje de error así podremos actuar en consecuencia.

Un saludo,
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 10:22.