lunes, 5 de marzo de 2007

Thumbnails en PHP

Si hay algo para lo que tuve que revisar a fondo la referencia de PHP en español pues fue la graciosada de hacer miniaturas de las imágenes que los usuarios iban enviando al servidor de la empresa donde trabajo, si bien ya dista un buen tiempo desde mi primer código desde cero para hacerlo, siempre tuve que hacerle algunas correcciones para que fuera reutilizable (palabra que suena bastante en la oficina), hasta que quedó tal y como se los muestro, me parece práctico y chiquito, y además centra las imágenes dentro del tamaño seleccionado, (tenía la idea antes de ver a Flickr hacerlo, pero no se me ocurría cómo), y por último, el archivo de salida siempre es un jpg.

function ThumbNail($rutaFoto, $thumbFoto, $max_alto = 75, $max_ancho = 75, $overwrite = true)
{
$checkedFoto = file_exists($rutaFoto);
if ( $checkedFoto === true )
{
$sizeFoto = GetImageSize( $rutaFoto );
$anchoFoto = $sizeFoto[0];
$altoFoto = $sizeFoto[1];

if ($overwrite == false)
{
$checkedThumb = file_exists ($thumbFoto);

if ( $checkedThumb === true )
{
return true;
}
}

$ExtImg = strrchr ($rutaFoto, ".");

if ( $ExtImg == ".gif" )
{
$imageActual = imagecreatefromgif ($rutaFoto);
}
elseif ( $ExtImg == ".jpg" || $ExtImg == ".jpeg" )
{
$imageActual = imagecreatefromjpeg ($rutaFoto);
}
elseif ( $ExtImg == ".png" )
{
$imageActual = imagecreatefrompng ($rutaFoto);
}

touch( $thumbFoto );
chmod( $thumbFoto, 0777 );

$razonFoto = $anchoFoto / $altoFoto;

if ($anchoFoto > $altoFoto)
{
$altoFinal = $max_alto;
$anchoFinal = ceil($max_alto*$razonFoto);
$destajeX = ($anchoFinal - $max_ancho)/-2;
$destajeY = 0;
}
else
{
$anchoFinal = $max_ancho;
$altoFinal = ceil($max_ancho/$razonFoto);
$destajeX = 0;
$destajeY = ($altoFinal - $max_alto)/-2;
}

$ImagenFinal = imagecreatetruecolor ($max_ancho, $max_alto);

ImageCopyResized ($ImagenFinal, $imageActual, $destajeX, $destajeY, 0, 0, $anchoFinal, $altoFinal, $anchoFoto, $altoFoto);
$controlImage = imagejpeg ( $ImagenFinal, $thumbFoto, 90);

return ($controlImage);
}
else
{
return false;
}
}

Acepta cinco entradas, las dos primeras indispensables y las otras tres opcionales: la ruta de la imagen de origen, la ruta donde se creará la miniatura, el alto máximo de la miniatura (75 pixeles por defecto), el ancho máximo (también 75 px. por defecto), y si se puede sobreescribir una imagen preexistente o no (por defecto es true)

Diganme que les parece y sus obvias sugerencias.

No hay comentarios: