Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/03/2008, 14:49
Avatar de iontxu
iontxu
 
Fecha de Ingreso: marzo-2008
Mensajes: 65
Antigüedad: 16 años, 1 mes
Puntos: 7
Sonrisa APORTE: Función que redimensiona imagenes

Hola!

Os paso una de mis primeras funciones en php. Como tal es sencillísima, pero a la par es efectiva. Seguro que se puede mejorar y os agradecería que me contestaseis si se os ocurre cualquier tipo de mejora o si existe alguna manera más fácil de hacerlo.

¿Para qué sirve?
Para redimensionar una imagen.

¿Cómo funciona?
Se le llama a la función (que en este caso he llamado "redimensionar") pasándole como argumentos:
  • la ruta relativa de la imagen respecto al fichero desde el cual la invocamos
  • el ancho máximo
  • el alto máximo
Compara las dimensiones de la imagen con las que le permitimos que tenga como máximo.
  • Si nuestra imagen es menor, ni la acorta ni la expande.
  • Si excede más de ancho que de alto, primero fija el ancho y luego el alto en proporción.
  • Si pasa eso mismo con el alto, cambian los roles de alto y ancho y opera de igual manera.
Por último muestra la imagen.

Ahí va el código:
Código PHP:
<?php

/*Función REDIMENSIONAR
Toma la ruta de una imagen, un valor máximo 
de ancho y otro máximo de alto. Si la imagen 
rebasa dichas medidas, calcula las medidas 
máximas que podría tener manteniendo el 
formato original para no salirse de las medidas
indicadas.

Finalmente la función imprime la imagen.
*/

function redimensionar($ruta,$ancho,$alto){

//Obtenemos las dimensiones, la ruta es absoluta.
$dim getimagesize($ruta);
/*getimagesize() pasa un array a la variable
$dim tal que $dim[0] contiene el ancho de la imagen 
y dim[1] contiene el alto.*/
if($dim[1]){
//Para asegurarnos de que dim[1] es diferente de cero
$cociente $dim[0] / $dim[1];
}
if(
$alto){
//Para asegurarnos de que alto es diferente de cero
$coc_max $ancho $alto;
}

    if((
$dim[0]<=$ancho)&&($dim[1]<=$alto)){
    
/*En este caso no pasa nada y 
    la imagen se imprime con su tamaño original*/
    
$ancho $dim[0];
    
$alto $dim[1];
    }else{
        if(
$cociente>=$coc_max){
        
/*En este caso el factor más restrictivo
        va a ser el ancho de la foto*/
        
$alto $ancho $cociente;
        }else{
        
/*En este caso el factor restrictivo 
        va a ser la altura de la foto*/
        
$ancho $alto $cociente;
        }
    }
    echo 
"<img src='$ruta' width='$ancho' height='$alto'>";
    
}
?>
Un ejemplo de cómo llamar a la imagen sería:
Código PHP:
<?php

include ("funciones/redimensionar.php"); /*ruta relativa del archivo 
                                          que contiene la función*/

$mi_ruta_relativa "fotos/imagen01.jpg"/*ruta relativa de la 
                                          imagen a mostrar*/

redimensionar($mi_ruta_relativa,600,400);

?>
Que sacaría a pantalla la foto "imagen01.jpg" sin que rebasase las dimensiones máximas de 600px de ancho y 400px de alto.

¿Cómo frenar la función en caso de que la imagen solicitada no exista?

Un saludo a todos los usuarios del foro.