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
![sonriente](http://static.forosdelweb.com/fdwtheme/images/smilies/smile.png)
. 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
![borracho](http://static.forosdelweb.com/fdwtheme/images/smilies/borracho.png)
(aunque no son imágenes grandes
![apachar ojo](http://static.forosdelweb.com/fdwtheme/images/smilies/wink.png)
)
Espero te sirva
Un saludo,