Foros del Web » Programando para Internet » PHP »

Escalar imagen y nl2br()

Estas en el tema de Escalar imagen y nl2br() en el foro de PHP en Foros del Web. Hola ¿Cómo hago para crear un thumbail de una imagen, manteniendo las proporciones de la imagen original y que el alto no exceda los 100px ...
  #1 (permalink)  
Antiguo 06/02/2006, 09:00
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
Escalar imagen y nl2br()

Hola

¿Cómo hago para crear un thumbail de una imagen, manteniendo las proporciones de la imagen original y que el alto no exceda los 100px y en base a ese alto sea el ancho?

He probado con las 5 o 6 faq's, pero ninguna me ha funcionado, tengo la GD 2. ¿Existe otro método para hacer esto?, quizás con javascripts.

Aprovecho para preguntar lo siguiente:

¿Cómo hacer para mostrar en un área de texto un valor que se guardó en la base de datos mediante nl2br(), pero que lo muestre sin los <br> y con los saltos de línea, es decir, como el usuario lo escribió la primera vez, antes de guardarlo en la base de datos.

Muchas gracias.
  #2 (permalink)  
Antiguo 06/02/2006, 09:16
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
No se que tiene que ver nl2br.
Fijate si este se ajusta a lo que buscas:
Código PHP:
<?
$maximoPx 
1000;
$imagen = isset( $_GET["imagen"]) ? $_GET["imagen"] : '';
$ancho = isset( $_GET["ancho"]) ? ( intval$_GET["ancho"] ) < $maximoPx ) ? intval$_GET["ancho"] ) : 0;
$alto = isset( $_GET["alto"]) ? ( intval$_GET["alto"] ) < $maximoPx ) ? intval$_GET["alto"] ) : 0;
$calidad = isset( $_GET["calidad"] ) ? ( intval$_GET["calidad"] ) < 100 ) ?  intval$_GET["calidad"] ) : 60 60;

if( 
strlen$imagen ) > ){
    
$extension strtolowersubstrstrrchr$imagen"." ), ) );
    
$extensionJpg = array( 'jpg''jpeg' );
    
$extensionGif = array( 'gif''png' );
    
    if( 
in_array$extension$extensionJpg ) ):
        
$imgSource imagecreatefromjpeg$imagen );
    elseif( 
in_array$extension$extensionGif ) ):
        
$imgSource imagecreatefromgif$imagen );
    else:
        
header"Location: $imagen" );
        exit;
    endif;

    
$anchoOriginal imagesx$imgSource );
    
$altoOriginal imagesy$imgSource );

    if( 
$alto===):
        
$alto = ( $ancho $anchoOriginal ) * $altoOriginal;
        if( 
$alto===):
            
$alto 1;
        endif;
    endif;

    if( 
$ancho===):
        
$ancho = ( $alto $altoOriginal ) * $anchoOriginal;
        if( 
$ancho===):
            
$ancho 1;
        endif;
    endif;


    
#Para GD 2.0.1 o mayor
    
$imgDestino imagecreatetruecolor$ancho$alto ); 
    
imagecopyresampled$imgDestino$imgSource0000$ancho$alto$anchoOriginal$altoOriginal); 

    
#Para versiones anteriores a GD 2.0.1
    #$imgDestino = imagecreate($ancho,$alto); 
    #imagecopyresized($imgDestino, $imgSource, 0, 0, 0, 0, $ancho, $alto, $anchoOriginal, $altoOriginal);

    
header"Content-type: image/jpeg" ); 
    
imagejpeg$imgDestino,''$calidad );
    
imagedestroy$imgSource );
    
imagedestroy$imgDestino );
}
?>
Le faltan unas cosas en cuanto a validaciones, sobre todo con el tema del tipo de imagen, pero funciona en la mayoría de los casos.
este file lo pones en el root, por ejemplo, bajo el nombre de __imagen.php, y luego en donde quieras poner una imagen redimensionada haces:
<img src="__imagen.php?imagen=images/algun.jpg&ancho=80" />

Ojo, este proceso para mi es mejor hacerlo al guardar la imagen, a no ser que no tengas acceso a eso.
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #3 (permalink)  
Antiguo 06/02/2006, 09:19
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
Gracias nicolaspar, enseguida lo pruebo a ver si me anda y te cuento
  #4 (permalink)  
Antiguo 06/02/2006, 09:33
Avatar de Seppo  
Fecha de Ingreso: marzo-2005
Ubicación: Buenos Aires, Argentina
Mensajes: 1.284
Antigüedad: 12 años, 9 meses
Puntos: 17
Sobre el nl2br te recomiendo que guardes los textarea sin usar nl2br y que esto lo agregues cuando lo quieras mostrar
  #5 (permalink)  
Antiguo 06/02/2006, 09:35
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
Funciona !!!

Gracias nicolaspar

Lo de nl2br es otra pregunta :P

Cita:
Iniciado por nicolaspar
Ojo, este proceso para mi es mejor hacerlo al guardar la imagen, a no ser que no tengas acceso a eso.
¿A qué te refieres con eso?

Y una última cosa:
Para hacer que el alto sea el predefinido, ¿sólo hay que cambiar en la url ancho por alto y darle un valor?, ¿qué es mejor, que el ancho o el alto sea el predefinido, o da lo mismo?

Muchas gracias
  #6 (permalink)  
Antiguo 06/02/2006, 09:37
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
Seppo, gracias, lo voy a hacer como dices
  #7 (permalink)  
Antiguo 06/02/2006, 12:46
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 13 años
Puntos: 34
Cita:
¿A qué te refieres con eso?
Vos vas a usar la GD cada vez que te pidan una imagen. Imagina un listado de imagenes, por cada usuario, es llamar al proceso muchas veces.
Esto mismo podes hacerlo al subir la imagen, y guardar la misma ya con el o los tamaños (podes guardar varios thumb) y así el proceso lo haces una sola vez en la vida.

Cita:
¿sólo hay que cambiar en la url ancho por alto y darle un valor?
Si, solo cambias eso. También podes pasarle ambos y la forzará a ese tamaño.

Cita:
¿qué es mejor, que el ancho o el alto sea el predefinido, o da lo mismo?
Eso depende de tu diseño. Tal vez lo romper el que sea mas alta, pero tal vez el que sea mas ancha.

Podes modificarlo y pasarle el alto, pero si supera al ancho que achique ambos hasta una medida top.


Para lo del nl2br suelo hacer un simple str_remplace("\n", "<br>", $str ).
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 06/02/2006, 13:03
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
Gracias a los dos !!

Me han solucionado una gran problemática (al menos para mi, ya que de php se muy poco)

nicolaspar podrías poner ese script en las faq's, ya que los otros no me resultaron, que extraño

Seppo, yo me estaba enredando con nl2br y str_remplace y tu comentario me solucionó todo facilmente

  #9 (permalink)  
Antiguo 13/02/2006, 20:11
Avatar de Mauri1  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago de Chile
Mensajes: 558
Antigüedad: 15 años
Puntos: 0
Hola de nuevo

nicolaspar es posible hacer que el script muestre una imagen con un ancho máximo establecido, es decir, cuando hago clic en un thumbail, este me lleva a la página de detalle, pero hay algunas imágenes que son muy grandes y lo que quiero es que estas imágenes no excedan un ancho específico, vale decir: una imagen de 640x480 me la muestre en 640x480, pero una imagen de 1024x768 me la muestre en 800x600... creo que me estoy enredando. La cosa es que el máximo ancho sea 760 y en base a ese ancho sea el alto, pero sólo cuando la imagen original tenga un ancho mayor de 760.

Muchas gracias
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 15:35.