| Trucos para PHP: Trucos y respuestas a dudas frecuentes | ||
|---|---|---|
| Anterior | ||
Es frecuente que en ciertos prpogramas no interese mostrar una miniatura de una imagen en lugar de la imagen completa. Puede interesarnos sobre todo para disminuir el volumen de tráfico y agilizar la carga de una página.
El siguiente código permite hacer una llamada como <img src="miniatura.php?nombre=imagen.jpg?ancho=100&alto=200"> y mostraría una imágen con un ancho máximo de 100 pixel y 200 de alto cmo máximo:
<?php
// ancho y alto predeterminados
$ancho=100;
$alto=100;
$nombre=$_GET['nombre'];
$ancho=$_GET['ancho'];
$alto=$_GET['alto'];
$tipo=substr($nombre,-3);
switch ($tipo)
{
case "jpg":
$im1=imagecreatefromjpeg($nombre);
break;
case "gif":
$a=explode("/",$nombre);
$a1=$a[count($a)-1];
if (!is_file("$_SERVER[DOCUMENT_ROOT]/imagenes/tmp/$a1.jpg"))
passthru("/usr/bin/convert $nombre $_SERVER[DOCUMENT_ROOT]/imagenes/tmp/$a1.jpg");
$nombre="imagenes/tmp/$a1.jpg";
$tipo="jpg";
$im1=imagecreatefromjpeg( "$nombre");
//unlink($nombre);
break;
case "png":
$im1=imagecreatefrompng($nombre);
break;
default:
return; /* o mostrar predeterminada
}
$tam = GetImageSize($nombre);
$ancho_imagen = $tam[0];
$alto_imagen = $tam[1];
$imagepro=$imageproph=1;
if ($ancho_imagen > $ancho)
$imageprop=$ancho/$ancho_imagen;
if ($alto_imagen > $alto)
$imageproph=$alto/$alto_imagen;
if ( $imageprop>$imageproph)
$imagepro=$imageproph;
$imagen_hor_tam= ceil($ancho_imagen*$imageprop) ;
$imagen_ver_tam=ceil($alto_imagen*$imageprop) ;
$im=imagecreate($imagen_hor_tam, $imagen_ver_tam);
ImageInterlace($im,1);
imagecopyresized($im, $im1, 0, 0, 0, 0, $imagen_hor_tam, $imagen_ver_tam, ImageSX($im1), ImageSY($im1));
switch ($tipo)
{
case "jpg":
Header("Content-type: image/jpg");Imagejpeg($im);
break;
case "png":
Header("Content-type: image/png");Imagepng($im);
break;
default:
return;
}
ImageDestroy($im);
error_reporting($a);
?>
|