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_y, 0, 0, $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