Ver Mensaje Individual
  #2 (permalink)  
Antiguo 02/09/2007, 16:13
okram
Invitado
 
Mensajes: n/a
Puntos:
Re: thumbnails cuadrados

Veamos que se puede hacer...

Modificando el código originalmente posteado en http://www.forosdelweb.com/showpost....91&postcount=6 me quedó esto:

Código PHP:
<?php
/* 
* Código por MyOKram 
* En respuesta al tema en http://www.forosdelweb.com/showthread.php?t=516336
* Foros del Web
* 02/09/07
*/
//Si no se ha especificado el archivo
if(empty($_GET['archivo'])) {
echo 
'No se especifico la ruta';
exit;
}
 
//Si no se ha especificado el tamaño del cuadrado
if(empty($_GET['pix']) or !is_numeric($_GET['pix']) or $_GET['pix'] < 1) {
echo 
'No se especifico las nuevas dimensiones del thumbnail';
exit;
}
 
$archivo $_GET['archivo'];
 
//Averiguamos la extension del archivo, porque de eso van a depender las funciones a usar
$extension pathinfo($archivo);
$extension $extension['extension'];
 
//Escoger la funcion. Usamos la funcion switch
switch($extension) {
case 
'jpg':
$f1 "imagecreatefromjpeg";
$f2 "imageJpeg";
$type "jpeg";
break;
case 
'gif':
$f1 "imagecreatefromgif";
$f2 "imageGif";
$type "gif";
break;
case 
'png':
$f1 "imagecreatefrompng";
$f2 "imagePng";
$type "png";
break;
default:
echo 
'Error, tipo desconocido de archivo: '.$extension;
exit;
break;
}
 
$img_fuente = @$f1($archivo);
 
//Dimensiones
$img_ancho imagesx($img_fuente);
$img_alto imagesy($img_fuente);
$pix intval($_GET['pix']);
$diferencia_ancho $img_ancho/$pix;
$diferencia_alto $img_alto/$pix;
 
if(
$diferencia_ancho $diferencia_alto) {
$nuevo_ancho $pix;
$prop $nuevo_ancho/$img_ancho;
$nuevo_alto round($img_alto*$prop);
$dist_x 0;
$dist_y = ($pix-$nuevo_alto)/2;
} else {
$nuevo_alto $pix;
$prop $nuevo_alto/$img_alto;
$nuevo_ancho round($img_ancho*$prop);
$dist_x = ($pix-$nuevo_ancho)/2;
$dist_y 0;
}
 
$imagen imagecreatetruecolor($pix$pix);
imagecopyresampled($imagen$img_fuente$dist_x$dist_y00$nuevo_ancho$nuevo_alto$img_ancho$img_alto);
Header("Content-type: image/$type");
$f2($imagen);
?>
Lo que el código hace es tomar la medida menor para hallar una proporcion, de tal manera que se obtiene un thumbnail de 100 x 100 ó más px. Luego, mediante la función imagecreatetruecolor($pix, $pix); creamos un cuadrado del tamaño que hayamos especificado.

Las variables $dist_x y $dist_y nos permitirán centrar la imagen en el cuadrado . Si no lo quieres así, cambia los valores por 0.

Aquí tienes 2 ejemplos:

EJEMPLO 1:

Original:
- http://farm2.static.flickr.com/1254/...f3a4545a_o.jpg
Redimensión (Cuadrado de 95px):
- http://myokram.coolinc.info/fdw/thum...a_o.jpg&pix=95

EJEMPLO 2:

Original:
- http://farm2.static.flickr.com/1216/...403570b9_o.jpg
Redimensión (Cuadrado de 180px):
- http://myokram.coolinc.info/fdw/thum..._o.jpg&pix=180

No publico las imágenes aquí ya que no me lo permiten (aunque no son imágenes grandes )

Espero te sirva

Un saludo,

Última edición por okram; 02/09/2007 a las 16:21