Jump to content

Manejo de IMAGENES MINIATURA PHP + GD


Recommended Posts

Hola, hace unos dias me di la idea de hacer agun escript para trabajar con imagenes en PHP

este script retorna imagenes en minitura de diferentes formas.

Puede "hacerlas caer" dentro de un cuadro de X=ancho , Y=alto.

Puede definirles un ancho maxino y escalar su alto para no distorsionarla o viceversa.

Puede crearles una "mascara" cuadrada que ce centrara o alineara a la imagen segun quieran.

img.class.php

<?php
class somaImagen{
    var $imagen_recurso;                    var $imagen_salida;    
    var $imagen_recurso_ancho;                var $imagen_salida_ancho;
    var $imagen_recurso_alto;                var $imagen_salida_alto;
    var $imagen_recurso_desde_x = 0;        var $imagen_salida_desde_x = 0;
    var $imagen_recurso_desde_y = 0;        var $imagen_salida_desde_y = 0;
    var $escala;                            var $imagen_imprimible;    
    var $rango_menor = 1;
    var $rango_mayor = 1000;    
                                                
// metodo para validar rangos de medidas                            
    function validarMedida($valor){
        if ($valor>=($this->rango_menor) and $valor<$this->rango_mayor){
            return $valor;            
        }else{
            if($valor    <=    ($this->rango_menor-1)    ){return   ($this->rango_menor); }
            if($valor    >=    $this->rango_mayor        ){return     $this->rango_mayor; }
        }
    }
        
//metodo para crear imagen y cambiar header
    function crearImagen($imagen){
        $this->imagen_recurso        =    $imagen;
        $this->imagen_salida         =     imagecreatefromjpeg($this->imagen_recurso);
        $this->imagen_recurso_ancho    =     imagesx($this->imagen_salida);
        $this->imagen_recurso_alto    =     imagesy($this->imagen_salida);
    }

//metodo para generar salida a la imagen
    function crearSalida($ancho,$alto){
        $this->imagen_salida_ancho = $ancho;
        $this->imagen_salida_alto = $alto;                
        $this->imagen_imprimible    =     imagecreatetruecolor($this->imagen_salida_ancho,$this->imagen_salida_alto);        
        imagecopyresampled(
            $this->imagen_imprimible,
            $this->imagen_salida,
            $this->imagen_recurso_desde_x,
            $this->imagen_recurso_desde_y,
            $this->imagen_salida_desde_x,
            $this->imagen_salida_desde_y,
            $this->imagen_salida_ancho,
            $this->imagen_salida_alto,
            $this->imagen_recurso_ancho,
            $this->imagen_recurso_alto
        );                
        imagejpeg($this->imagen_imprimible, NULL,100);
        imagedestroy($this->imagen_imprimible);
    }
    
    
    ## Metodo para crear imagen de ANCHO o ALTO MAXIMO
    function Cuadro($lados,$imagen){
        $lados=$this->validarMedida($lados);
        $this->crearImagen($imagen);
            if ( $this->imagen_recurso_ancho >= $this->imagen_recurso_alto )
            {$this->escala=$lados/$this->imagen_recurso_ancho;}
            else
            {$this->escala=$lados/$this->imagen_recurso_alto;}
        $this->crearSalida($this->imagen_recurso_ancho * $this->escala , $this->imagen_recurso_alto * $this->escala);
    }
    
    ## Metodo para crear imagen de ANCHO maximo (sin importar alto)
    function AnchoMax($ancho,$imagen){
        $ancho=$this->validarMedida($ancho);
        $this->crearImagen($imagen);
            $this->escala=$ancho/$this->imagen_recurso_ancho;
        $this->crearSalida($this->imagen_recurso_ancho * $this->escala , $this->imagen_recurso_alto * $this->escala);
    }
    
    ## Metodo para crear imagen de ALTO maximo (sin importar ancho)
    function AltoMax($alto,$imagen){
        $alto=$this->validarMedida($alto);
        $this->crearImagen($imagen);
        $this->escala=$alto/$this->imagen_recurso_alto;            
        $this->crearSalida($this->imagen_recurso_ancho * $this->escala , $this->imagen_recurso_alto * $this->escala);
    }
    
    ## Metodo para crear imagen
    # nota: Alineacion = Tope+Izquierda=0; Fondo+Derecha=1; Centrada+Centrada=2;
    function Encuadrar($medida,$imagen,$alineacion){
        $medida=$this->validarMedida($medida);
        $this->crearImagen($imagen);
            if ( $this->imagen_recurso_ancho <= $this->imagen_recurso_alto ){
                $this->escala                     =     $this->imagen_salida_ancho/$this->imagen_recurso_ancho;
                if($alineacion!=0){    
                        if($alineacion==1){    
                                $this->imagen_salida_desde_y=($this->imagen_recurso_alto-$this->imagen_recurso_ancho);
                            }
                        if($alineacion==2){    
                                $this->imagen_salida_desde_y=($this->imagen_recurso_alto-$this->imagen_recurso_ancho)/2;
                            }                        
                    }
                $this->imagen_recurso_alto        =     $this->imagen_recurso_ancho;                
            }else {
                $this->escala                      =     $this->imagen_salida_alto/$this->imagen_recurso_alto;
                if($alineacion!=0){    
                        if($alineacion==1){    
                                $this->imagen_salida_desde_x=($this->imagen_recurso_ancho-$this->imagen_recurso_alto);
                            }
                        if($alineacion==2){    
                                $this->imagen_salida_desde_x=($this->imagen_recurso_ancho-$this->imagen_recurso_alto)/2;
                            }                        
                    }
                $this->imagen_recurso_ancho         =    $this->imagen_recurso_alto;                
            }            
        $this->crearSalida($medida,$medida);
    }
}
?>

 

 

Para hacerlo funcionar hay que crear un segundo archivo e incluir img.class.php

<?php
################################### >> UTILIZACION 
header('Content-type: image/jpeg');
include('img.inc.php');
$imagen = new somaImagen();

$imagen->Encuadrar(200,'carpeta/imagen.jpg',2); // esta es la unica linea de codigo
// puedes enviarles las variables por GET
################################### >> FIN UTILIZACION 

// Ejemplos de Metodos

    ## Metodo para crear imagen de ANCHO o ALTO MAXIMO (300px) (escalando el lado menor)
    #    $imagen->Cuadro  (300,'carpeta/a.jpg'); 
    
    ## Metodo para crear imagen de ANCHO (300px) maximo (sin importar alto)
    #    $imagen->AnchoMax(300,'carpeta/a.jpg'); 
    
    ## Metodo para crear imagen de ALTO maximo (300px) (sin importar ancho)
    #    $imagen->AltoMax (300,'carpeta/a.jpg');
    
    ## Metodo para crear imagen cuadrada y centrada (encajada en el centro (300px))
    #    $imagen->Encuadrar(300,'carpeta/soma.jpg',2);
    #     nota: Alineacion = Tope+Izquierda=0; Fondo+Derecha=1; Centrada+Centrada=2;

// Notas:
    ## 1 
    #    Los Rangos de medida por defecto estan configurados por defecto entre 1 & 1000
    #    si son menores a 1 entonces lo deja en 1 & si son mayores a 1000 los deja en 1000
    
    ## 2 
    #    Solo Imagenes JPG
?>

 

espero que les sirba

pude hecerlo con funciones pero asi se ve mas lindo O.o

 

Aun es un poco brusco y pretendo hacer algo mas elaborado luego.

 

saludos

 

Edited by egonacho
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...