Comunidad de diseño web y desarrollo en internet online

Escalado de imagen con libreria GD

Citar            
MensajeEscrito el 19 Abr 2007 05:45 pm
Quiero pedirles ayuda en algo que ya me tiene loco. :cry:

Lo que deseo lograr:
Tengo imágenes de tamaño grande y necesito hacer versiones pequeñas de ellas que queden inscritas en un cuadrado de 100 x 100 pixeles. Las imágenes no son cuadradas, por lo que deberían quedar centradas con respecto al cuadrado de 100 x 100 y el espacio exedente debería ser negro.
Todo funciona bien, excepto que la maldita imagen no se escala. Es como si escalara unicamente el area visible de la imagen, pero no la propia imagen.

Aqui les dejo el código con algunas explicaciones añadidas para que vean:

Código :

<?php

// El header de la imagen
header("Content-type: image/jpeg");

// Creo una imagen desde un archivo jpeg.
// El nombre de la imagen es enviado por GET
// $img2 = imagecreatefromjpeg("imagenes/".$_GET['url_original']);
$img2 = imagecreatefromjpeg("imagenes/foto2.jpg");

// Dimensiones del area donde se inscribirá la jpeg
$ancho_encuadre = 100;
$alto_encuadre = 100;

// Dimensiones escaladas de la jpeg
// posiciones X e Y donde deberá situar con respecto al área donde quedará inscrita
$ancho_original = imagesx($img2);
$alto_original = imagesy($img2);
if ($alto_original >= $ancho_original) {
   $alto_escalado = $alto_encuadre;
   $ancho_escalado = $ancho_original * $alto_escalado / $alto_original;
   $pos_x = ($ancho_encuadre - $ancho_escalado)/2;
   $pos_y = 0;
} else {
   $ancho_escalado = $ancho_encuadre;
   $alto_escalado = $alto_original * $ancho_escalado / $ancho_original;
   $pos_y = ($alto_encuadre - $alto_escalado)/2;
   $pos_x = 0;
};

// Imagen de fondo sobre la que se pegará la jpeg
$img1 = imagecreatetruecolor($ancho_encuadre, $alto_encuadre);

// Escalo la imagen jpeg sobre la imagen de fondo
ImageCopyResampled($img1,$img2,$pos_x,$pos_y,0,0,$ancho_escalado,$alto_escalado,$ancho_encuadre,$alto_encuadre);

// Doy salida a la foto final como jpeg calidad 80
imagejpeg($img1, '', 80);

// Destruyo ambas imágenes
imagedestroy($img2);
imagedestroy($img1);

?>


Desde ya, muchas gracias!

Por ebruna

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 22 Abr 2007 02:04 pm
Ya he solucionado en gran parte mi problema... Pero desafortunadamente sigo teniendo uno. Tal vez puedan ayudarme:

No sé cómo hacer para mantener la proporción de ancho y alto de la imagen original...
Hasta ahora tomo una imagen de, por ejemplo, 550x697 pixeles y la escalo a unas dimensiones fijas (100x100 pixeles), distorsionando la imagen.
Lo que me encantaría poder lograr es escalar la imagen manteniendo las proporciones originales, pero inscribiéndola dentro de un cuadrado de dimensiones fijas, dando un resultado como este, ya sea sobre un fondo negro o de otro color:

Miniatura ideal


Miniatura distorsionada


Alguna idea?

Por ebruna

5 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 25 Abr 2007 09:43 pm
Tenias que analizar bien el problema.-

Solucion:

Código :


list($width, $height) = getimagesize($filename);
$newwidth  = 100;
$newheight = 100;

$thumb = imagecreatetruecolor($newwidth, $newheight);

if(($newwidth/$newheight)>($width/$height)){
$newwidth2=($width/$height)*$newheight;

$espaciow=($newwidth-$newwidth2)/2;
$espacioh=0;
$newwidth=$newwidth2;
}else{
$newheight2=($height/$width)*$newwidth;
$espaciow=0;
$espacioh=($newheight-$newheight2)/2;
$newheight=$newheight2;

}
$source = imagecreatefromjpeg($filename);

imagecopyresized($thumb, $source,$espaciow,$espacioh,0,0,$newwidth,$newheight, $width, $height);

imagejpeg($thumb);


Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 25 Abr 2007 09:49 pm
ve esta pagina esta hecha con esa opcion.-
www.patriciomolina.cl

Por york3rs

Claber

561 de clabLevel

1 tutorial

Genero:Masculino  

LA___Chile

msie
Citar            
MensajeEscrito el 26 Abr 2007 10:19 am
Qué bien!...

Es casi igual a como lo estaba haciendo, no?

Voy a analizarlo para ver en qué se diferencia (siempre hay que aprender ! ) :D

Gracias York3rs

Por ebruna

5 de clabLevel



Genero:Masculino  

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.