Foros del Web » Programando para Internet » PHP »

redimensionar imagen

Estas en el tema de redimensionar imagen en el foro de PHP en Foros del Web. Hola, estuve buscando en Google sobre cambiar el tamaño a las imágenes. Soy novato en este tema... La cuestión es que no entiendo este script: ...
  #1 (permalink)  
Antiguo 12/02/2008, 18:55
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
redimensionar imagen

Hola, estuve buscando en Google sobre cambiar el tamaño a las imágenes. Soy novato en este tema... La cuestión es que no entiendo este script:

Código PHP:
$ancho_max=400;
$alto_max=400;
$nombre=basename($_GET['imagen']);
$datos getimagesize($nombre);
if(
$datos[2]==1){$img = @imagecreatefromgif($nombre);}
if(
$datos[2]==2){$img = @imagecreatefromjpeg($nombre);}
if(
$datos[2]==3){$img = @imagecreatefrompng($nombre);}
$ratio = ($datos[0] / $ancho_max);
$alto = ($datos[1] / $ratio);
if(
$alto>$alto_max){$ancho=$alto_max*$ancho_max/$alto;$alto=$alto_max;$ancho_max=$ancho;}
$thumb imagecreatetruecolor($ancho_max,$alto);
imagecopyresampled($thumb$img0000$ancho_max$alto$datos[0], $datos[1]);
if(
$datos[2]==1){header("Content-type: image/gif"); imagegif($thumb);}
if(
$datos[2]==2){header("Content-type: image/jpeg");imagejpeg($thumb);}
if(
$datos[2]==3){header("Content-type: image/png");imagepng($thumb); }
imagedestroy($thumb); 
Inserto las imagenes así:
<img src="redimensionar.php?imagen=IMAGEN">

Lo poco que entiendo es que, por ejemplo, una imagen tiene de ancho 800x600, la muestra 400x300, si el ancho es mayor a 400px, lo reduce a 400 y hace proporcional a la altura, si la altura es mayor a 400px, lo reduce a 400 y proporciona el ancho.

El tema es que hay una imagen que es menos a 400, tanto de ancho como alto, pero me muestra de ancho 400, es decir, me la estira. Su tamaño original es 130x80 y me lleva la imagen a 400x246px.

No se como hacer, donde poner un gif o algo por el estilo, para que si tanto el ancho como el alto son menores a 400, lo deje como está.

Desde ya gracias
  #2 (permalink)  
Antiguo 12/02/2008, 20:35
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: redimensionar imagen

En ese código, $datos[0] contiene el ancho de la imagen original, mientras que $datos[1] contiene la altura. Dado esto, sólo tienes que hacer una comparación entre los valores que tienes en $ancho_max y $alto_max y los valores que corresponden a la imagen, y si determinas que las medidas son menores, te saltas la parte de la redimensión (usando un if()).

http://www.php.net/getimagesize

Un saludo,
  #3 (permalink)  
Antiguo 13/02/2008, 00:56
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 8 meses
Puntos: 21
Sonrisa Re: redimensionar imagen

hechale un ojo a esto

saludos

http://blog.unijimpe.net/generar-thumbnails-con-php/
__________________
gerardo
  #4 (permalink)  
Antiguo 13/02/2008, 00:56
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 8 meses
Puntos: 21
Sonrisa Re: redimensionar imagen

eh aqui otra donde puedas consultar

http://php.apsique.com/php/thumbnails

saludos
__________________
gerardo
  #5 (permalink)  
Antiguo 14/02/2008, 09:12
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: redimensionar imagen

Y donde es que pongo el if??? como lo hago?? porfa ayuda que no entiendo nada de esto de redimensionar imágenes

Gracias
  #6 (permalink)  
Antiguo 14/02/2008, 09:59
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 8 meses
Puntos: 21
Sonrisa Re: redimensionar imagen

mira yo realize uno con ayuda de otro mis miniaturas asi
prueba2.php
<?php

$width=$_GET['width'];
$height=$_GET['height'];
$des_foto=$_GET['nomreal'];
//$width = 80;
//$height = 80;
$filename=trim($_GET['filename']);//imagen a original
//$etiqueta_thumnail=substr(strrchr($filename,"/"),1);
//$rfisica=realpath($filename);
//verificamos el tipo de imagen
list($ani, $ali, $tipo, $atr)=getimagesize($filename);

//tipos de archivos que captura la variable $tipo
/*
valor-------tipo de imagen
1 = GIF
2 = JPG
3 = PNG
4 = SWF
5 = PSD
6 = BMP
7 = TIFF(intel byte order)
8 = TIFF(motorola byte order)
9 = JPC
10 = JP2
11 = JPX
12 = JB2
13 = SWC
14 = IFF
15 = WBMP
16 = XBM
*/
//creamos segun sea el tipo de imagen

switch($tipo)
{
case 1://gif
$src_image=imagecreatefromgif($filename);//devuelve un id de la imagen
break;
case 2://jpg
$src_image=imagecreatefromjpeg($filename);//devuelve un id de la imagen
break;
case 3://png
$src_image=imagecreatefrompng($filename);//devuelve un id de la imagen
break;

}

//$crear_imagen=imagecreatefromjpeg(';//devuelve un id de la imagen

//imagen desde el archivo
//$src_image=imagecreatefromjpeg($filename);//devuelve un id de la imagen


//$image = imagecreate($width, $height);
$image=ImageCreateTrueColor($width, $height);//creamos la imagen con color real

//asignamos los colores
$bg = imagecolorallocate($image, 216, 216, 235);//para color de fondo
imagefill($image,0,0,$bg); //rellenamos con el color de fondo

//$bg = imagecolorallocate($image, 216, 216, 216);//para color de fondo
//imagefill($image,0,0,$bg);
//imagecolortransparent($image,$bg);

$verde = imagecolorallocate($image, 96, 7, 143);//para el color de la letra

$margin_x = 10;//margen x
$margin_y = 10;//margen y

$w=$width-2*$margin_x;//100
$h=$height-2*$margin_y;//100

$src_w=imagesx($src_image);//aqui obtenemos la anchura de la imagen original apartir del id generado
$src_h=imagesy($src_image);//aqui obtenemos la altura de la imagen original apartir del id generado
if(($w > $src_w) && ($h > $src_h))
{
$dst_w = $src_w;
$dst_h = $src_h;
}
else
{
//¿o escalamos la imagen de acuerdo a la dimensión horizontal?
if(($w/$h) < ($src_w/$src_h))
{
$dst_w=$w;
$dst_h=$w*$src_h/$src_w;
}
else//¿o la escalamos de acuerdo a la dimensión vertical?
{
$dst_w=$h*$src_w/$src_h;
$dst_h=$h;
}
}
//imagecopyresized($image, $src_image, ($width-$dst_w)/2, ($height-$dst_h)/2,0, 0, $dst_w, $dst_h, $src_w, $src_h);
imagecopyresampled($image, $src_image, ($width-$dst_w)/2, ($height-$dst_h)/2,0, 0, $dst_w, $dst_h, $src_w, $src_h);
//colocamos el texto sobre la imagen
imagestring($image, 0, $margin_x, ($height-$margin_y), $des_foto, $verde);

//encabezado correspondiente para los datos de salida
switch($tipo)
{
case 1://gif
header("Content-type: image/gif");
imagegif($image);
break;
case 2://jpg
header("Content-type: image/jpeg");
imagejpeg($image);
break;
case 3://png
header("Content-type: image/png");
imagepng($image);
break;
}
//header("Content-type: image/jpeg");


//generamos la imagen
//imagejpeg($image);

//liberamos la memoria
imagedestroy($image);
?>

lo invocas en otra pagina
asi:


<img src="prueba2.php?filename=foto.jpg&tiempo=094737&w idth=100&height=100&nomreal=foto.jpg" WIDTH="100" HEIGHT="100" VSPACE="8" class="thum" >


saludos
__________________
gerardo
  #7 (permalink)  
Antiguo 14/02/2008, 10:00
Avatar de chalchis  
Fecha de Ingreso: julio-2003
Mensajes: 1.773
Antigüedad: 20 años, 8 meses
Puntos: 21
Sonrisa Re: redimensionar imagen

esta fue mi fuente

http://www.programacion.net/php/tutorial/phpsol_gd/3/

saludos
__________________
gerardo
  #8 (permalink)  
Antiguo 15/02/2008, 13:07
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: redimensionar imagen

Verás, la función que realiza la redimensión de la imagen es imagecopyresampled(). Por lo tanto, el if cumplirá la función de evaluar los tamaños y decidir si se ha de aplicar esta función. En sí, esta parte ya es la que trabaja en cambiar el tamaño de la imagen:

Código PHP:
$alto = ($datos[1] / $ratio); 
if(
$alto>$alto_max){$ancho=$alto_max*$ancho_max/$alto;$alto=$alto_max;$ancho_max=$ancho;} 
$thumb imagecreatetruecolor($ancho_max,$alto); 
imagecopyresampled($thumb$img0000$ancho_max$alto$datos[0], $datos[1]); 
Por lo tanto, debes evaluar los tamaños mediante una condición if, y sólo si alguna (?: o las dos?) dimensiones es mayor en la imagen real que en la redimension, entonces aplicar ese bloque de codigo, algo así:

Código PHP:
if($datos[0] > $ancho_max or $datos[1] > $alto_max) {
    
$alto = ($datos[1] / $ratio); 
    if(
$alto $alto_max) {
        
$ancho=$alto_max*$ancho_max/$alto;
        
$alto=$alto_max;
        
$ancho_max=$ancho;
    } 
    
$thumb imagecreatetruecolor($ancho_max,$alto); 
    
imagecopyresampled($thumb$img0000$ancho_max$alto$datos[0], $datos[1]); 

Un saludo,
  #9 (permalink)  
Antiguo 16/02/2008, 11:43
 
Fecha de Ingreso: diciembre-2006
Mensajes: 294
Antigüedad: 17 años, 4 meses
Puntos: 2
Re: redimensionar imagen

Ok gracias, pero las imagenes mas pequeñas no me las muestra....
  #10 (permalink)  
Antiguo 16/02/2008, 12:21
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: redimensionar imagen

Código PHP:
if($datos[0] > $ancho_max or $datos[1] > $alto_max) {
    
$alto = ($datos[1] / $ratio); 
    if(
$alto $alto_max) {
        
$ancho=$alto_max*$ancho_max/$alto;
        
$alto=$alto_max;
        
$ancho_max=$ancho;
    } 
    
$thumb imagecreatetruecolor($ancho_max,$alto); 
    
imagecopyresampled($thumb$img0000$ancho_max$alto$datos[0], $datos[1]); 
} else 
$thumb = &$img//Si no se hace la redimension, hacemos que el $thumb sea la misma imagen 
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 02:48.