Foros del Web » Programando para Internet » PHP »

Redimensionar imagen a altura y ancho fijos SIN deformar

Estas en el tema de Redimensionar imagen a altura y ancho fijos SIN deformar en el foro de PHP en Foros del Web. Parece una contradiccion: ajustar el ancho y el alto de una imagen (fijar ambos dos parametros) y NO deformar pero lo he visto en muchas ...
  #1 (permalink)  
Antiguo 27/01/2008, 14:18
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Desacuerdo Redimensionar imagen a altura y ancho fijos SIN deformar

Parece una contradiccion: ajustar el ancho y el alto de una imagen (fijar ambos dos parametros) y NO deformar pero lo he visto en muchas galerias de imagenes XXX.

He pensado un algoritmo para hacer eso pero necesito de una funcion del tipo de imagecopyresized que me permita elegir de la imagen origen LAS CUATRO coordenadas (x1,y1) y (x2,y2) y no solamente (x1,y1) como es esa funcion.

¿ Alguien sabe de algo asi ? no se me ocurre otra forma de poder hacer eso........

Ideas ?
__________________
Salu2!
  #2 (permalink)  
Antiguo 27/01/2008, 15:50
 
Fecha de Ingreso: febrero-2006
Mensajes: 10
Antigüedad: 18 años, 1 mes
Puntos: 1
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

Cita:
Iniciado por Italico76 Ver Mensaje
Parece una contradiccion: ajustar el ancho y el alto de una imagen (fijar ambos dos parametros) y NO deformar pero lo he visto en muchas galerias de imagenes XXX.

He pensado un algoritmo para hacer eso pero necesito de una funcion del tipo de imagecopyresized que me permita elegir de la imagen origen LAS CUATRO coordenadas (x1,y1) y (x2,y2) y no solamente (x1,y1) como es esa funcion.

¿ Alguien sabe de algo asi ? no se me ocurre otra forma de poder hacer eso........

Ideas ?

Espero que esto te sirva:

Código PHP:
<? 

$im      
$_GET['im'];
$maxsize $_GET['maxsize'];
if (
strpos($im,"gif")==false){


            
if (
$maxsize == '') {
    
$maxsize 100;
}

// The file
$filename $im;

// Set a maximum height and width
$width  $maxsize;
$height $maxsize;

// Content type
header('Content-type: image/jpeg');

// Get new dimensions
list($width_orig$height_orig) = getimagesize($filename);

if (
$width && ($width_orig $height_orig)) {
    
$width = ($height $height_orig) * $width_orig;
} else {
    
$height = ($width $width_orig) * $height_orig;
}

// Resample
$image_p imagecreatetruecolor($width$height);
$image   imagecreatefromjpeg($filename);
imagecopyresampled($image_p$image0000$width$height$width_orig$height_orig);

// Output
imagejpeg($image_p);
imagedestroy($image);
imageDestroy($image_p);

}
//------------------------------------------------------------------   gif
else
{




            
if (
$maxsize == '') {
    
$maxsize 100;
}

// The file
$filename $im;

// Set a maximum height and width
$width  $maxsize;
$height $maxsize;

// Content type
  
Header("Content-type: image/gif"); 

// Get new dimensions
list($width_orig$height_orig) = getimagesize($filename);

if (
$width && ($width_orig $height_orig)) {
    
$width = ($height $height_orig) * $width_orig;
} else {
    
$height = ($width $width_orig) * $height_orig;
}

// Resample
$image_p imagecreatetruecolor($width$height);
$image   imagecreatefromgif($filename);
imagecopyresampled($image_p$image0000$width$height$width_orig$height_orig);

// Output
 
imageGif($image_p);
imagedestroy($image);
imageDestroy($image_p);
$fuente = @imagecreatefromgif($im);
           
    
       
}
?>
Para visualizar la imagen tenes que usar lo siguiente:

Código PHP:
<img src="http://tupagina.com/thumbnail.php?im=./img/mi_image.jpg&maxsize=124"
Si queres agregarle mas extensiones deberias hacer un IFELSE para PNG por ejemplo. El script soporte solo JPG y GIFs

Saludos....
  #3 (permalink)  
Antiguo 27/01/2008, 15:50
Avatar de eddwinpaz  
Fecha de Ingreso: noviembre-2007
Ubicación: Merida , Venezuela
Mensajes: 1.066
Antigüedad: 16 años, 4 meses
Puntos: 25
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

HOLA te recomiendo que uses la Clase PHPimagen de OkRam.

Código PHP:
   include('admin/lib/mysql.php');
   include(
'admin/lib/class.sql.php');
   
   
$sql   = new sql;
   
$mysql = new MYSQL;
   
   if(
$mysql->connect()== true){
     
       
$SQL=$sql->consult('id, imagen','noticias','id DESC');
      
$data=mysql_fetch_array($SQL) or die('[LOW LEVEL ERROR]-> NO FETCH!- 12');
      
   } 

//recibiremos el nombre de la imagen por URL
$imagen 'files/contenido/'.$data['imagen'].'';

include(
'PHPImagen.lib.php');

$imagen = new Imagen($imagen); 
$imagen->resize('347','188',true); 

$imagen->doPrint(100); 
la conexion a la base de datos no viene con el script solo es una que hice yo... saludos espero que te haya servido..

PHPImagen es una herramienta que facilita ciertas tareas a la hora de trabajar con imágenes. La finalidad es simplificar el proceso usualmente tedioso de redimensionar y etiquetar con imágenes y/o texto las imágenes on the fly, además de cambiar su color. Esto quiere decir que el script genera automáticamente una imagen tras su ejecución, la que luego, según la decisión del usuario, serán enviada como imagen, como archivo adjunto descargable, o será guardada en el servidor.

El script requiere PHP >=5, la librería GD y opcionalmente la librería FreeType. La mayoria de webservers trae todas estas librerías instaladas .

http://php.myokram.info/phpimagen/
  #4 (permalink)  
Antiguo 27/01/2008, 19:03
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

gracias a todos por contestar! eddwinpaz: puede que esa clase de okram... haga lo que necesite

( caso contrario.... voy a molestar a OKRAM.. a ver si se puede hacer )
__________________
Salu2!
  #5 (permalink)  
Antiguo 27/01/2008, 21:10
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

Si se puede

SI te fijas en la página donde coloco los ejemplos de uso, los thumbnails son generados todos con la librería, y todos son cuadrados de 80x80 sin importar el tamaño y el ratio de la imagen.

La función resize() sirve para redimensionar, especificando el ancho y el alto como los dos primeros parámetros. El tercer parámetro sirve para indicar si se debe hacer una redimension proporcional, y que la imagen conserve su aspecto; o que se corte y se ajuste a las medidas indicadas.

Cita:
Iniciado por Tutorial PHPImagen
El tercer parámetro cut indica si se debe o no forzar que la nueva imagen tenga las medidas indicadas. Su valor por default es false; esto quiere decir que la nueva imagen usará las nuevas medidas como medidas máximas, pero conservará su aspect ratio. Por lo tanto, la nueva imagen no necesariamente medirá lo que se especifique. Esto es útil, por ejemplo, para mostrar thumbnails en una tabla, evitando así que se descuadre nuestro código, ya que la imagen nunca sobrepasará las medidas especificadas.

Si el parámetro cut es puesto en true, las medidas indicadas serán las medidas que adopte la imagen generada. Para esto, la imagen es redimensionada totalmente en una de sus dimensiones, adoptando la medida especificada. En la otra dimensión, se corta los excesos hasta que la imagen adopte el tamaño deseado. Así, si queremos mostrar thumbnails por ejemplo, todos los thumbnails serán de la misma medida, sin importar el ratio de la imagen original.
Un saludo,
  #6 (permalink)  
Antiguo 27/01/2008, 21:21
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

okram: te felicito! no se como lo habras logrado....... espero poder pronto meter manos a esa clase tuya
__________________
Salu2!
  #7 (permalink)  
Antiguo 28/01/2008, 06:45
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Se me para el script

OKRAM y a todos: estoy usando la libreria PHPImagen ... para hacer galerias pero me encontre con un problemita: solo me procesó 12 imagenes y luego se paró

No se si sera lo que se venia hablando de que consume "muchos recursos" (o tiempo de ejecucion)... y por eso se para el script.

Ideas ? lo estoy haciendo en mi LOCALHOST asi podria modificar lo que me digan del Apache.

// gracias!!!!!!
__________________
Salu2!
  #8 (permalink)  
Antiguo 28/01/2008, 10:18
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

He intentado alargar el tiempo de ejecucion como dican aca... pero nada he logrado
__________________
Salu2!
  #9 (permalink)  
Antiguo 28/01/2008, 19:16
Avatar de Italico76  
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 16 años, 11 meses
Puntos: 292
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

okram ha de estar ocupado........... a ver si alguien me puede ayduar...............

se me frena el script........ solo dura unos cuantos segundos en ejecucion

Código PHP:
<?php
include_once "PHPImagen.lib.php";  // libreria de OKRAM

set_time_limit(1000);
do_gal ("/imagenes"140,180);

Function 
do_gal($dir,$ancho,$alto){  // hacer galeria  
if (is_dir($dir)) {

$dir2 $dir."/th";
if (!
is_dir($dir2)) mkdir("$dir2",0700);

    if (
$fp opendir($dir)) {
        while ((
$archivo readdir($fp)) !== false) {
            
//$info =  pathinfo($dir.$archivo);  $ext  =  $info['extension']; // extension        

            
$archivo_partes =explode(".",$archivo);
            
$archivo_sin_ext=$archivo_partes[0];
            
            if (
$archivo!="." && $archivo!=".."){            
            
//echo $dir2."/".$archivo_sin_ext."<br/>";   echo $dir."/".$archivo."<br/>";
                    
            
$imagen = new Imagen($dir."/".$archivo);            
            
$imagen->resize($ancho,$alto,TRUE);
            
$imagen->doSave($dir2."/".$archivo_sin_ext,90); 
            
            }
        }
        
closedir($fp);
    }
}

}


?>
He detectado que el problema se origina con imagenes muy pesadas.... para lo que es un JPEG...como 200 Kb....

¿ Deberia excluirlas ?
__________________
Salu2!

Última edición por Italico76; 28/01/2008 a las 19:22
  #10 (permalink)  
Antiguo 29/01/2008, 21:00
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: Redimensionar imagen a altura y ancho fijos SIN deformar

Es un "problema" (de hecho es más una limitación) de la cantidad de memoria de la dispone nuestro servidor PHP para ejecutar el script. Para solucionarlo tenemos que ampliar el límite que por defecto suele ser 8M.

Podemos hacerlo directamente en el php.ini:

Código:
memory_limit = 15M
O en el código PHP:

Código PHP:
// Antes de iniciar la librería, en nuestro código PHP
@ini_set("memory_limit","15M"); 
o sino por medio de un .htaccess:

Código:
php_value memory_limit 15M
Se puede asignar más memoria, pero tener en cuenta que ello implica mayor riesgo de sobrecarga del servidor.

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 05:55.