Foros del Web » Programando para Internet » PHP »

Generar thumbnail directamente??

Estas en el tema de Generar thumbnail directamente?? en el foro de PHP en Foros del Web. Buenas, tengo un script (sacado de este mismo foro creo) que genera un thumnail a partir de una imagen, y lo guarda en una carpeta ...
  #1 (permalink)  
Antiguo 27/12/2006, 14:41
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 6 meses
Puntos: 8
Generar thumbnail directamente??

Buenas, tengo un script (sacado de este mismo foro creo) que genera un thumnail a partir de una imagen, y lo guarda en una carpeta del servidor.

Mi pregunta es como debo modificar el codigo para que en vez de guardar la imagen, la muestre en la pagina nada más generarse.

He probado varias cosas pero no lo consigo hacer funcionar. El código es el siguiente:

(El script recibe dos variables como parametro).


Código PHP:
<?php 

        $imagen 
=  $_GET["imagen"];
    
$altura =  $_GET["altura"];
    
     
// Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
     
$dir_thumb "thumbs/";
     
// Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
     // el thumbnail se llamaría "tn_imagen1.jpg"
     
$prefijo_thumb "tn_";

     
// Aquí tendremos el nombre de la imagen.
     
$nombre=basename($imagen);
     
// Aquí la ruta especificada para buscar la imagen.
     
$camino=dirname($imagen)."/";

     
// Intentamos crear el directorio de thumbnails, si no existiera previamente.
     
if (!file_exists($camino.$dir_thumb))
          @
mkdir ($camino.$dir_thumb0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);

     
// Aquí comprovamos que la imagen que queremos crear no exista previamente
     
if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
          echo 
$camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n";
          
$img = @imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
          
// miramos el tamaño de la imagen original...
          
$datos getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
          
// intentamos escalar la imagen original a la medida que nos interesa
          
$ratio = ($datos[1] / $altura);
          
$anchura round($datos[0] / $ratio);
          
// esta será la nueva imagen reescalada
          
$thumb imagecreatetruecolor($anchura,$altura);
          
// con esta función la reescalamos
          
imagecopyresampled ($thumb$img0000$anchura$altura$datos[0], $datos[1]);
          
// voilà la salvamos con el nombre y en el lugar que nos interesa.
          
imagepng($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);
                
     }


?>

Gracias y saludos.
  #2 (permalink)  
Antiguo 27/12/2006, 18:23
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 1 mes
Puntos: 25
Re: Generar thumbnail directamente??

mmm es más fácil usar gdresize intenta la funcion GD de php. Saludos
__________________
Hospedaje Web al mejor costo!
  #3 (permalink)  
Antiguo 27/12/2006, 19:00
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Generar thumbnail directamente??

No entiendo lo que quieres decir, me he mirado el link pero... haver, lo que yo quiero es que en una seccion de mi web, a partir de unas imagenes contenidas en un directorio del servidor, las cuales son subidas por los usuarios, se muestren estas reducidas de tamaño, pero sin tener que guardar la nueva imagen.

Es decir, generar el thumbnail directamente y mostrarlo. :p
  #4 (permalink)  
Antiguo 27/12/2006, 21:12
Avatar de DIegoli  
Fecha de Ingreso: mayo-2006
Ubicación: Lima, Peru
Mensajes: 23
Antigüedad: 17 años, 10 meses
Puntos: 0
Re: Generar thumbnail directamente??

y porque no achicas la imagen a la hora de mostrarla.
Es decir llamas la imagen y le das el tamaño que deseas.
<img width=150px .... etc>
salu2
  #5 (permalink)  
Antiguo 28/12/2006, 04:51
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Generar thumbnail directamente??

Porque pierde mucha calidad, los thumbnails que se me crean se ven mucho mejor. :p
  #6 (permalink)  
Antiguo 28/12/2006, 14:28
Avatar de urgido  
Fecha de Ingreso: febrero-2005
Mensajes: 2.351
Antigüedad: 19 años, 1 mes
Puntos: 25
Re: Generar thumbnail directamente??

Mira abdelior esta muy claro el tip que te dí, la librería GD es la libreria que manipula las imagenes, lógicamente debes tener GD en tu hosting... si lees la web que te dí con determinación verás que tienes todo para hacer lo que deseas, inclusive thumbshots.org es la librería que usa para manipular sus thumbs... con GD puedes achicar, agrandar y muchas cosas más sin perder calida.
__________________
Hospedaje Web al mejor costo!
  #7 (permalink)  
Antiguo 28/12/2006, 15:03
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Generar thumbnail directamente??

Ya ya pero si el thumbnail lo creo correctamente. No pierdo calidad, y lo reduzco a la medida que yo quiero, el problema es al mostrarlo. Mi duda es mostrarlo, sin tener que guardarlo en el servidor. Si lo guardo es facil mostrarlo luego, pero sino?

Saludos ;)
  #8 (permalink)  
Antiguo 28/12/2006, 15:06
 
Fecha de Ingreso: septiembre-2004
Ubicación: Santiago de Chile
Mensajes: 156
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: Generar thumbnail directamente??

mmm pero como vas a mostrar algo que no haz guardado?? osea mostrar una imagen que no existe???????????

exijo una explicacion :D PLOP...
  #9 (permalink)  
Antiguo 28/12/2006, 15:10
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Generar thumbnail directamente??

Lo que no quiero guardar es el thumbnail, la imagen en si, esta guardada en una carpeta a tamaño grande, y lo que quiero es generar el thumbnail y mostrarlo, pero sin guardar la nueva imagen redimensionada :p
  #10 (permalink)  
Antiguo 28/12/2006, 15:15
 
Fecha de Ingreso: septiembre-2004
Ubicación: Santiago de Chile
Mensajes: 156
Antigüedad: 19 años, 6 meses
Puntos: 0
Re: Generar thumbnail directamente??

a tonces NO ENTIENDES el concepto de Thumbnail...

Thumbnail es hacer una copia de una imagen grande y dejarla en pequeño.

con esto quedarias con la misma imagen pero de tamaño reducido...

si lo que tu quieres hacer es achicar la imagen grande y mantener la calidad...

fijate el ejemplo que te dejaron sobre GD..

saludos
  #11 (permalink)  
Antiguo 28/12/2006, 15:34
 
Fecha de Ingreso: enero-2003
Ubicación: Córdoba, Argentina
Mensajes: 1.047
Antigüedad: 21 años, 2 meses
Puntos: 10
Re: Generar thumbnail directamente??

Puedes probar agregando lo que puse en negrita:

Código:
<?php 

    $imagen =  $_GET["imagen"];
    $altura =  $_GET["altura"];
    
     // Lugar donde se guardarán los thumbnails respecto a la carpeta donde está la imagen "grande".
     $dir_thumb = "thumbs/";
     // Prefijo que se añadirá al nombre del thumbnail. Ejemplo: si la imagen grande fuera "imagen1.jpg",
     // el thumbnail se llamaría "tn_imagen1.jpg"
     $prefijo_thumb = "tn_";

     // Aquí tendremos el nombre de la imagen.
     $nombre=basename($imagen);
     // Aquí la ruta especificada para buscar la imagen.
     $camino=dirname($imagen)."/";

     // Intentamos crear el directorio de thumbnails, si no existiera previamente.
     if (!file_exists($camino.$dir_thumb))
          @mkdir ($camino.$dir_thumb, 0777) or die("No se ha podido crear el directorio ".$camino.$dir_thumb);

     // Aquí comprovamos que la imagen que queremos crear no exista previamente
     if (!file_exists($camino.$dir_thumb.$prefijo_thumb.$nombre)) {
          echo $camino.$dir_thumb.$prefijo_thumb.$nombre." NO existía<br>\n";
          $img = @imagecreatefrompng($camino.$nombre) or die("No se encuentra la imagen $camino$nombre<br>\n");
          // miramos el tamaño de la imagen original...
          $datos = getimagesize($camino.$nombre) or die("Problemas con $camino$nombre<br>\n");
          // intentamos escalar la imagen original a la medida que nos interesa
          $ratio = ($datos[1] / $altura);
          $anchura = round($datos[0] / $ratio);
          // esta será la nueva imagen reescalada
          $thumb = imagecreatetruecolor($anchura,$altura);
          // con esta función la reescalamos
          imagecopyresampled ($thumb, $img, 0, 0, 0, 0, $anchura, $altura, $datos[0], $datos[1]);
          // voilà la salvamos con el nombre y en el lugar que nos interesa.
          imagepng($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre);   
     }
     echo "<img src='".$camino.$dir_thumb.$prefijo_thumb.$nombre."' />";
?>
__________________
oohh... quisiera ser godines!!!
  #12 (permalink)  
Antiguo 28/12/2006, 16:52
Avatar de AbdelioR  
Fecha de Ingreso: septiembre-2006
Ubicación: Tarragona
Mensajes: 926
Antigüedad: 17 años, 6 meses
Puntos: 8
Re: Generar thumbnail directamente??

Safe la opcion que propones no funciona. Habia intentado algo similiar pero nada... Voy a seguir investigando haver..
  #13 (permalink)  
Antiguo 28/12/2006, 21:44
 
Fecha de Ingreso: octubre-2004
Ubicación: Lima, Perú
Mensajes: 185
Antigüedad: 19 años, 5 meses
Puntos: 1
Re: Generar thumbnail directamente??

No se si te sirva este codigo pero lo utilizo y me gusta aunque aun me falta cambiarle unos detalles en los rango de ancho y altura.
Código PHP:
<?php
function thumb($imagefile$w) {

    
/* Obtener extensión del archivo */
    
$dot = (strlen($imagefile) - strrpos($imagefile".")-1)*(-1);

    
$ext substr($imagefile$dot);
    
$ext strtolower($ext);    
        
    
/* Chequear que las imágenes sean de alguno de los formatos soportados. Por medio de la función strtolower(), pasamos la extensión a minúsculas */
    
    
if(strtolower($ext) == "gif") {
        if (!
$src_img imagecreatefromgif($imagefile)) {
            echo 
"Error abriendo $imagefile!"; exit;
        }
    } else if(
strtolower($ext) == "jpg" || strtolower($ext) == "jpeg") {
        if (!
$src_img imagecreatefromjpeg($imagefile)) {
            echo 
"Error abriendo $imagefile!"; exit;
        }
    } else if(
strtolower($ext) == "png") {
        if (!
$src_img imagecreatefrompng($imagefile)) {
            echo 
"Error abriendo $imagefile!"; exit;
        }
    } else if(
strtolower($ext) == "JPG" || strtolower($ext) == "JPEG") {
        if (!
$src_img imagecreatefromjpeg($imagefile)) {
            echo 
"Error abriendo $imagefile!"; exit;
        }
     }    else {
        echo 
"Formato de imágen no soportada"; exit;
    }
    
    
/*La función getimagesize devuelve un array con la siguiente estructura:
        array {
            [0] => "ancho en pixeles"
            [1] => "alto en pixeles"
            [2] => "tipo de imágen (1=GIF; 2=JPG; 3=PNG)"
            [3] => "width=xxx height=yyy" (para usar con el tag img de HTML)
        }
    */
    
    
$hw getimagesize($imagefile);
    
/* $w es el ancho para la nueva imágen */
    
$new_w $w;
    
/* A través del cociente entre el alto y el cociente entre la anchura original y la anchura nueva, mantenemos las proporciones de la imágen.*/
    
$new_h $hw["0"]/($hw["1"]/$w);

    
/* Intentamos crear una imágen 'true color'. Esta función es soportada a partir de GD 2.0, por lo que en caso de no funcionar, se usará la función imageCreate */
    
$dst_img = @imagecreatetruecolor($new_h$new_w);
    if(!
$dst_img) {
      
$dst_img imageCreate($new_h$new_w);
    }
    
    
/* Se crea la imágen con los valores obtenidos y borramos las imágenes de la memoria. */
    
imagecopyresampled($dst_img,$src_img,0,0,0,0,$new_h,$new_w,imagesx($src_img),imagesy($src_img));
    
imagejpeg($dst_img,"",100);
    
ImageDestroy($src_img);
    
ImageDestroy($dst_img);
}
/* Se indica el tipo de archivo */
header("Content-type: image/jpeg");

/* Llamamos a la función para crear el thumbnail con los valores obtenidos por HTTP GET */
thumb($_GET[image], $_GET[w]);

?>
Solo lo llamarias thumb.php?image=lacarpetadondeestan&w=120
120 es el tamaño maximo del thumb. ya es cuestion de que lo pruebes la calidad es buena.
  #14 (permalink)  
Antiguo 11/04/2007, 00:33
Avatar de ROMPK3  
Fecha de Ingreso: abril-2002
Mensajes: 6
Antigüedad: 22 años
Puntos: 0
De acuerdo Re: Generar thumbnail directamente??

se paso compadre! justo lo que he buscado!!!!

espero poder ayudarlo en alguna ocacion.
  #15 (permalink)  
Antiguo 27/04/2007, 12:47
 
Fecha de Ingreso: mayo-2005
Ubicación: Murcia
Mensajes: 319
Antigüedad: 18 años, 11 meses
Puntos: 0
Re: Generar thumbnail directamente??

Se podría especificar un ancho y largo?
  #16 (permalink)  
Antiguo 13/11/2007, 18:21
Avatar de pablocb  
Fecha de Ingreso: octubre-2006
Ubicación: Valencia
Mensajes: 39
Antigüedad: 17 años, 5 meses
Puntos: 0
Re: Generar thumbnail directamente??

Ok, funciona perfectamente pero hay un detalle mal. Tal y como esta dispuesta la funcion, $w representa el alto de la nueva imagen y no el alto. Para solucionarlo, solo hay que modificar estas lineas de código:
Código PHP:
$new_w $w;
    
/* A través del cociente entre el alto y el cociente entre la anchura original y la anchura nueva, mantenemos las proporciones de la imágen.*/
    
$new_h $hw["0"]/($hw["1"]/$w); 
Cambiandolas por esto:
Código PHP:
$new_h $w;
    
/* A través del cociente entre el alto y el cociente entre la anchura original y la anchura nueva, mantenemos las proporciones de la imágen.*/
    
$new_w $hw["1"]/($hw["0"]/$w); 
Una tonteria, pero para los detallistas....
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:48.