Foros del Web » Programando para Internet » PHP »

Redimensionamiento proporcional anchura - modificacion

Estas en el tema de Redimensionamiento proporcional anchura - modificacion en el foro de PHP en Foros del Web. Muy buenas, tengo la siguiente función que cuando yo le paso una imagen y el valor de la altura me la redimensiona, me gustaria si ...
  #1 (permalink)  
Antiguo 18/11/2005, 13:59
 
Fecha de Ingreso: marzo-2005
Mensajes: 28
Antigüedad: 19 años, 1 mes
Puntos: 0
De acuerdo Redimensionamiento proporcional anchura - modificacion

Muy buenas, tengo la siguiente función que cuando yo le paso una imagen y el valor de la altura me la redimensiona, me gustaria si alguien me puede ayudar (yo lo he intentado pero me ha salido la imagen estirada y mal) que en vez de con la altura haga lo mismo pero con la anchura.
MUCHISIMAS GRACIAS



Código PHP:
<?

function thumbjpeg($imagen,$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 imagecreatefromjpeg($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. 
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 


 
?>
  #2 (permalink)  
Antiguo 18/11/2005, 15:02
 
Fecha de Ingreso: julio-2005
Mensajes: 36
Antigüedad: 18 años, 9 meses
Puntos: 0
Cita:
Iniciado por luisetto
Muy buenas, tengo la siguiente función que cuando yo le paso una imagen y el valor de la altura me la redimensiona, me gustaria si alguien me puede ayudar (yo lo he intentado pero me ha salido la imagen estirada y mal) que en vez de con la altura haga lo mismo pero con la anchura.
MUCHISIMAS GRACIAS



Código PHP:
<?

function thumbjpeg($imagen,$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 imagecreatefromjpeg($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. 
          
imagejpeg($thumb,$camino.$dir_thumb.$prefijo_thumb.$nombre); 
     } 


 
?>
Hola lo que pasa es que este script solo es valido para aquellas imagenes donde se trata de escalar solo a la altura es decir que solo funciona para casos en que el alto de la imagen original es mayor al ancho de la misma, y por ende al que tratamos de escalar y no asi para aquellas en que el alto de la imagen es menor al ancho(alto>ancho funciona, ancho>alto no funciona-distorsion).
Para no redundar el codigo en el foro te recomiendo que veas la lista de temas o FAQ's http://www.forosdelweb.com/f18/indice-tematico-las-faqs-php-143918/ que hay en este foro y veas el tratamiento de imagenes ahí encontraras scripts para que funcionen con dos parametros, espero que veas la lista por que ahí, hay muchos temas mas interesantes para el tratamiento de imagenes en PHP. Hasta la proxima.


Solo te aconsejo lo que aprendi aqui
  #3 (permalink)  
Antiguo 18/11/2005, 15:07
 
Fecha de Ingreso: julio-2003
Ubicación: España
Mensajes: 723
Antigüedad: 20 años, 9 meses
Puntos: 0
Hace tiempo hice este script para mostrar una imagen redimensionada:

Código PHP:
<?php

    $extension
=strrchr($_REQUEST['img'],".");
    
    if (
$extension==".jpg"$imgcache=imagecreatefromjpeg($_REQUEST['img']);
    elseif (
$extension==".gif"$imgcache=imagecreatefromgif($_REQUEST['img']);
    else 
$imgcache=imagecreatefrompng($_REQUEST['img']);
    
    
$ancho=imagesx($imgcache);
    
$alto=imagesy ($imgcache);

    if (
$ancho>100$nuevo_ancho=$_REQUEST['ancho'];
    else 
$nuevo_ancho=$ancho;
    
    
$nuevo_alto=($nuevo_ancho*$alto)/$ancho;    
    
    if (
$nuevo_alto>100$nuevo_alto=$_REQUEST['alto'];
    
    
$nuevo_ancho=($nuevo_alto*$ancho)/$alto;
    

    
$imgmini=imagecreatetruecolor($nuevo_ancho,$nuevo_alto);
    
imagecopyresampled($imgmini,$imgcache,0,0,0,0,$nuevo_ancho,$nuevo_alto,imagesx($imgcache),imagesy ($imgcache));

    if (
$extension==".jpg"imagejpeg($imgmini);
    elseif (
$extension==".gif"imagegif($imgmini);
    else 
imagepng($imgmini);

    
imagedestroy ($imgmini);
    
imagedestroy ($imgcache);
?>
Lo que hace es darle un ancho a la imagen en función de su alto y darle un alto en función de su ancho de manera que o bien tiene un alto de 100 pixeles o un ancho de 100 píxeles, pero o una cosa o la otra (y siempre con su alto/ancho correspondiente), de manera que nunca sale estirada, sale siempre proporcionada.

Para usar la función puedes pasarle un ancho o un alto determinados o puedes omitir estos parámetros y dejar que el script ponga su alto y ancho por defecto:

Código:
<html>
<head>
</head>
<body>
<img src="miniatura.php?img=e:\Mis documentos\misite\imagenes\imagen.jpg&alto=50&ancho=100">
<img src="miniatura.php?img=e:\Mis documentos\misite\imagenes\imagen.gif">
</body>
</html>
Se puede usar el script para mostrar una galería completa de imágenes, por ejemplo las que tengas en una determinada carpeta, solo tienes que leer el directorio y para cada imagen generar el código anterior.

Mira si te sirve.

Saludos.
__________________
Solo nosotros podemos decidir qué hacer con el tiempo que se nos ha dado. (Gandalf)

Última edición por DjNelson; 18/11/2005 a las 15: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 08:29.