Foros del Web » Programando para Internet » PHP »

Problema para crear Thumbnails

Estas en el tema de Problema para crear Thumbnails en el foro de PHP en Foros del Web. ¡Hola! Estoy intentando hacer un codigo que me cree thumbnails para una galeria de fotos, pero no lo consigo. Primero con esto subo las imagenes: ...
  #1 (permalink)  
Antiguo 27/03/2009, 06:10
Avatar de Freakme  
Fecha de Ingreso: julio-2007
Ubicación: Portugalete
Mensajes: 97
Antigüedad: 16 años, 9 meses
Puntos: 0
Problema para crear Thumbnails

¡Hola!
Estoy intentando hacer un codigo que me cree thumbnails para una galeria de fotos, pero no lo consigo.

Primero con esto subo las imagenes:
Código:
$servidor_ftp = "ftp.miservidor.com";
$id_con = ftp_connect($servidor_ftp) or die("No ha sido posible conectarse a $servidor_ftp");
$resultado_login = ftp_login($id_con,"usuario","pass");
$archivo=$_FILES['archivo']['name'];
if (!empty($archivo))
   {if (is_uploaded_file($_FILES['archivo']['tmp_name']))
       {$remoto=$_FILES['archivo']['tmp_name'];
        $ruta="/public_html/paginaweb/thumbnails";
        ftp_put($id_con, "$ruta/$archivo", $remoto, FTP_BINARY);
       }
   }
Seguido, con esto determino si la imagen es horizontal, cuadrada o vertical para darle el tamaño:
Código:
list($ancho, $alto) = getimagesize("$archivo");
$posicion=$ancho-$alto;
echo "ancho: $ancho y alto: $alto\n<p />";
switch ($posicion)
       {
        case $posicion<0:
        $nuevo_ancho=($ancho*110)/$alto;
        $nuevo_alto=110;
        break;
        case $posicion==0:
        $nuevo_ancho=110;
        $nuevo_alto=110;
        break;
        case $posicion>0:
        $nuevo_ancho=110;
        $nuevo_alto=($alto*110)/$ancho;
        break;
       }
Y finalmente pongo esto, es el codigo que he encontrado en varios sitios, pero no me funciona:

Código:
$thumb = imagecreate($nuevo_ancho, $nuevo_alto);
$imagen = imagecreatefromjpeg($archivo);
imagecopyresampled($thumb, $imagen, 0, 0, 0, 0, $nuevo_ancho, $nuevo_alto, $ancho, $alto);
$minis="../public_html/paginaweb/thumbnails/minis/";
$imagen_thumb=imagejpeg($thumb,$minis.$imagen);
imagedestroy($thumb);
¿Alguien puede echarme una mano?
Gracias :D
  #2 (permalink)  
Antiguo 27/03/2009, 08:42
Avatar de armandoweb  
Fecha de Ingreso: enero-2003
Ubicación: San Cristobal, Santa Fe, Argentina
Mensajes: 544
Antigüedad: 21 años, 3 meses
Puntos: 7
Respuesta: Problema para crear Thumbnails

Hola:

Hay una clase que es muy buena para hacer lo que buscas:

http://www.verot.net/php_class_upload.htm

Solo debes configurarla con los parámetros que quieras y ya está.

Espero que te sirva.

ARMANDOWEB.
__________________
www.awdesarrollos.com.ar - [twitter: @armandoweb] - [Skype: awdesarrollos"]
  #3 (permalink)  
Antiguo 29/03/2009, 15:53
Avatar de Freakme  
Fecha de Ingreso: julio-2007
Ubicación: Portugalete
Mensajes: 97
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema para crear Thumbnails

Gracias, armandoweb, estoy probando con la clase upload esta, pero no me funciona, he encontrado un ejemplo de cómo usarlo aquí:

http://www.forosdelweb.com/f18/ejemp...agenes-665589/

pero no me funciona. Este es el código que pongo:

Código:
//Subir la imagen
$foo = new Upload($_FILES['archivo']);// nombre del objeto file 
  if ($foo->uploaded) {   
    $foo->file_new_name_body = "mini_$archivo";// nombre de la imagen, quiero q
    $foo->image_resize = true; // autoriza que si se redimensione
    $foo->image_convert = jpg; // formato a convertir
    $foo->image_x = $nuevo_ancho; // Tamaño en pixeles - Ancho
    $foo->image_y = $nuevo_alto; // Tamaño en pixeles - Alto
    $foo->Process('/public_html/paginaweb/thumbnails/minis/'); // Carpeta donde se va grabar la imagen
    if ($foo->processed) {
                   echo 'Ok.. si subió';
   $foo->Clean();
    } else {
           echo 'Error al subir la imagen ' . $foo->error;
    }
  }
pero nada, no me dá respuesta, ni me crea el thumbnail ni nada.

¿Alguna ayuda?
Gracias.
  #4 (permalink)  
Antiguo 29/03/2009, 20:34
Avatar de portalmana  
Fecha de Ingreso: septiembre-2007
Ubicación: Montevideo-Uruguay
Mensajes: 633
Antigüedad: 16 años, 7 meses
Puntos: 80
Respuesta: Problema para crear Thumbnails

Tengo una clase en php que genera las miniaturas.
No me deja poner aquí el código por la extencion pues esta comentada y ocupa mas de 10.000 lineas incluyendo como se usa.-

Te dejo un enlace para descargarla :
sics . webcindario . com / descargas / Imagen . rar
Para Usarla:
Código PHP:
include("Imagen.php");
// Pasando datos a través de JSON  sin variables
$datos        '{     "imgOrigen"    : "cuboFrente.png",
                       "imgDestino": "cuboFrente_edit.png",
                       "ancho"        : "100",
                      "alto"        : "80",
                       "modo"        : 0,
                       "filas"        : 3,
                       "columnas"    : 4,
                       "calidad"    : 95,
                    "columnas"    : 4,
                       "centrado"    : 11,
                       "borrar"    : true
                   }'
;
$obj_img    = new Imagen($datos);
$obj_img    ->procesarImagen();


// Con variables
$datos        '{ 
                    "imgOrigen"    : "'
.$foto.'",
                       "imgDestino": "FOTOS_CHICAS/'
.$foto.'",
                       "ancho"        : "1024",
                      "alto"        : "768",
                       "modo"        : 0,
                       "filas"        : 3,
                       "columnas"    : 4,
                       "centrado"    : 11,
                       "borrar"    : false
                   }'
;
$obj_img    = new Imagen($datos);
$obj_img    ->procesarImagen();


// Utilizando metodos Set
$obj_img    = new Imagen();
$obj_img    ->set("imagenOrigen","cuboFrente.png");
$obj_img    ->set("imagenDestino",'pruebaSetsss.png');
$obj_img    ->set("anchoDestino",'250');
$obj_img    ->set("altoDestino",1500);
$obj_img    ->set("recorte",array('filas'    => 3'columnas'    => 4'centrado'    =>    12));
$obj_img    ->set ("calidadImagen",100);
$obj_img    ->set("modo",0);
$obj_img    ->procesarImagen(); 
Los Modos son 4:
Modo 0: Respeta Proporcionalidad y toma como base el ancho.
Modo 1: Respeta Proporcionalidad y toma como base el alto.
Modo 2: Respeta ancho y alto recortando el resto.
Modo 3: Respeta ancho y alto pero deforma la imagen.

En el Modo 2 tenemos 3 parámetros, que se utilizan para crear una cuadricula virtual, donde centrar el corte.
La opción filas y columnas establece el tamaño de la cuadricula para realizar el recorte y la propiedad centrado en que cuadrante se centrara para realizar el recorte.
Ejemplo en una cuadricula de 3x4
[00][01][02][03]
[04][05][06][07]
[08][09][10][11]
Si elegimos centrado en 11, el recorte lo tratara de centrar en el angulo inferior derecho.
Bueno cualquier duda pregunta no mas, pero la clase esta bastante documentada.
Saludos
  #5 (permalink)  
Antiguo 29/03/2009, 20:46
Avatar de Ronruby  
Fecha de Ingreso: julio-2008
Ubicación: 18°30'N, 69°59'W
Mensajes: 4.879
Antigüedad: 15 años, 9 meses
Puntos: 416
Respuesta: Problema para crear Thumbnails

El problema esta en el switch:

Código php:
Ver original
  1. switch ($posicion)
  2.        {
  3.         case $posicion<0:
  4.         $nuevo_ancho=($ancho*110)/$alto;
  5.         $nuevo_alto=110;
  6.         break;
  7.         case $posicion==0:
  8.         $nuevo_ancho=110;
  9.         $nuevo_alto=110;
  10.         break;
  11.         case $posicion>0:
  12.         $nuevo_ancho=110;
  13.         $nuevo_alto=($alto*110)/$ancho;
  14.         break;
  15.        }

Usa un if, elseif, else ...

Sino, si quieres seguir usando switch, entonces tendria que ser algo como:

Código php:
Ver original
  1. switch (true)
  2.        {
  3.         case $posicion<0:
  4.         $nuevo_ancho=($ancho*110)/$alto;
  5.         $nuevo_alto=110;
  6.         break;
  7.         case $posicion==0:
  8.         $nuevo_ancho=110;
  9.         $nuevo_alto=110;
  10.         break;
  11.         case $posicion>0:
  12.         $nuevo_ancho=110;
  13.         $nuevo_alto=($alto*110)/$ancho;
  14.         break;
  15.        }

Esa sintaxis del switch me la enseño okram xD
  #6 (permalink)  
Antiguo 30/03/2009, 01:54
Avatar de Freakme  
Fecha de Ingreso: julio-2007
Ubicación: Portugalete
Mensajes: 97
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema para crear Thumbnails

Buenos días, lo primero daros las gracias por responder, pero resulta que no me funciona ninguna de ambas soluciones.
Portalmana, he probado tu class, pero me dá error:
Parse error: syntax error, unexpected T_STRING, expecting T_OLD_FUNCTION or T_FUNCTION or T_VAR or '}' in /home/imagina/domains/clubimagina.com/public_html/menosesmas/thumbnails/class.imagen.php on line 19

Ronruby, he probado poniendo el (true), y el switch funciona, pero sigue sin crearme el thumbnail.
Es más, tengo puesto un
echo "ancho: $ancho y alto: $alto\n<p />";
después de subir la imagen y un
echo "nuevo_ancho: $nuevo_ancho y nuevo_alto: $nuevo_alto\n<p />";

después del switch y cuando uso el class.upload.php no me aparece ninguno de los dos.
Me sube la imagen, pero no me escribe los echo ni me crea la miniatura... :S
socorro...
  #7 (permalink)  
Antiguo 30/03/2009, 05:25
 
Fecha de Ingreso: diciembre-2008
Mensajes: 118
Antigüedad: 15 años, 4 meses
Puntos: 6
Respuesta: Problema para crear Thumbnails

Código PHP:
<?php
//En el primer parámetro introducimos la dirección donde está la imagen que queremos redimensionar. 
//Algunos servidores permiten que sea una URL aunque muchos no lo permiten. 
//En el segundo parámetro escribimos el nombre que queremos poner a la nueva imágen. 
//Aquí ten cuidado con la extensión, tienes que poner la misma que la imagen original (jpg, gif o png)

function redimensionar_imagen($imagen$nombre_imagen_asociada)
    {
        
$nuevo_ancho=150//valores que se pueden cambiar
        
$nuevo_alto=100//por ejemplo
        
$directorio=""//por si se quiere alojar en algun directorio determinado
        //Recojo información de la imágen
        
$info_imagen getimagesize($imagen);
        
$alto $info_imagen[1];
        
$ancho $info_imagen[0];
        
$tipo_imagen $info_imagen[2];
       
        
//Determino las nuevas medidas en función de los límites
        
if($ancho $nuevo_ancho OR $alto $nuevo_alto)
        {
            if((
$alto $nuevo_alto) > ($ancho $nuevo_ancho))
            {
                
$nuevo_ancho round($ancho $nuevo_alto $alto,0) ;       
            }
            else
            {
                
$nuevo_alto round($alto $nuevo_ancho $ancho,0);   
            }
        }
        else 
//si la imagen es más pequenia que los límites la dejo igual.
        
{
            
$nuevo_alto $alto;
            
$nuevo_ancho $ancho;
        }
 
        
// dependiendo del tipo de imagen tengo que usar diferentes funciones
        
switch ($tipo_imagen) {
            case 
1//si es gif …
                
$imagen_nueva imagecreate($nuevo_ancho$nuevo_alto);
                
$imagen_vieja imagecreatefromgif($imagen);
                
//cambio de tamaño…
                
imagecopyresampled($imagen_nueva$imagen_vieja0000$nuevo_ancho$nuevo_alto$ancho$alto);
                if (!
imagegif($imagen_nueva$directorio $nombre_imagen_asociada)) return false;
            break;
           
            case 
2//si es jpeg …
                
$imagen_nueva imagecreatetruecolor($nuevo_ancho$nuevo_alto);
                
$imagen_vieja imagecreatefromjpeg($imagen);
                
//cambio de tamaño…
                
imagecopyresampled($imagen_nueva$imagen_vieja0000$nuevo_ancho$nuevo_alto$ancho$alto);
                if (!
imagejpeg($imagen_nueva$directorio $nombre_imagen_asociada)) return false;
            break;
           
            case 
3//si es png …
                
$imagen_nueva imagecreatetruecolor($nuevo_ancho$nuevo_alto);
                
$imagen_vieja imagecreatefrompng($imagen);
                
imageAlphaBlending($imagen_nuevafalse);
                
imageSaveAlpha($imagen_nuevatrue); 
                
//cambio de tamaño…
                
imagecopyresampled($imagen_nueva$imagen_vieja0000$nuevo_ancho$nuevo_alto$ancho$alto);
                if (!
imagepng($imagen_nueva$directorio $nombre_imagen_asociada)) return false;
            break;
        }
        return 
true//si todo ha ido bien devuelve true
    
}
?>
Esta funcion es d elo mejorcito para hacer tumbs y no emplear muchos recursos en realizarlo.

De todos modos y postee los problemas ue presenta la libreria GD en su ultima version.

Lo mas importante a valorar en el aspecto de usar GD es si las imagenes que se van a redimensionar las suben usuarios de la web(cualquiera), o las subes tu.

Si eres tu el que las sube no creo que haya problema, pero si las imagenes provienen de distintas camaras de foros, moviles, .... algunas pueden presentar fayos que no asume la libreria GD, en ese caso seria recomendable usar imagemagick para este tipo de cosas
  #8 (permalink)  
Antiguo 31/03/2009, 03:15
Avatar de Freakme  
Fecha de Ingreso: julio-2007
Ubicación: Portugalete
Mensajes: 97
Antigüedad: 16 años, 9 meses
Puntos: 0
Respuesta: Problema para crear Thumbnails

No me funciona ninguno de vuestros códigos...
Podriaís poner algún ejemplo en el que los hayais usado, llevo 3 días con eso y esto un poco frustrado...
A ver si es que me estoy equivocando en algo, yo doy por supuesto que con estos códigos se crea un archivo de imagen que se guarda en la carpeta que le ponga, ¿verdad?
Gracias.

Edito:
He dado con un código que me funciona cuando lo uso en localhost, pero lo subo al servidor y no funciona. Este es el código:

Código:
<?php
// The file you are resizing
$file = 'miimagen.jpg';

//This will set our output to 45% of the original size
$size = 0.45;

// This sets it to a .jpg, but you can change this to png or gif
header('Content-type: image/jpeg');

// Setting the resize parameters
list($width, $height) = getimagesize($file);
$modwidth = $width * $size;
$modheight = $height * $size;

// Resizing the Image
$tn = imagecreatetruecolor($modwidth, $modheight);
$image = imagecreatefromjpeg($file);
imagecopyresampled($tn, $image, 0, 0, 0, 0, $modwidth, $modheight, $width, $height);

// Outputting a .jpg, you can make this gif or png if you want
//notice we set the quality (third value) to 100
$save="mini_$file";
imagejpeg($tn, $save, 100);
?>
He mirado el phpinfo y tengo activada la librería GD en el servidor... ¿¿alguna idea??

Última edición por Freakme; 31/03/2009 a las 04:12
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 11:26.