egonacho Posted March 16, 2008 Report Share Posted March 16, 2008 (edited) 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 March 16, 2008 by egonacho Link to comment Share on other sites More sharing options...
ESFAXOR Posted March 16, 2008 Report Share Posted March 16, 2008 Vale egonacho. lo moveré al subforo Tutoriales & Herramientas para Webmasters que voy a terminar de rematar el gran desorden que estaba, para pedir ricón webmaster como subforo- Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now