Clase para escalar Imágenes desde PHP con librería GD

Hace algún tiempo me dedique a leer un poco sobre el manejo de imágenes con PHP.
Me di cuenta que en cada proyecto en el que trabajaba me era necesario contar con diferentes tamaños de imagen para adaptarlas al diseño, por cuestiones de peso o simplemente optimizar tiempo.
Así que decidí programar algo para manejar el tamaño y forma de las imágenes, y encontre la libreria gd.
La clase se implementa así:
-
<?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;
-
-
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 ; }
-
}
-
}
-
-
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);
-
}
-
-
-
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);
-
}
-
-
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);
-
}
-
-
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);
-
}
-
-
-
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);
-
}
-
-
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);
-
}
-
}
-
?>
Aqui les muestro lo que pueden obtener con los metodos.
-
<?php
-
include('img.inc.php');
-
$imagen = new somaImagen();
-
$imagen->Encuadrar(200,'carpeta/imagen.jpg',2);
-
?>
Método:
Cuadro (maximo , url_imagen);
Resultado:
Escala la imagen para “Encajarla” dentro de un cuadrado de ancho = “maximo”.

Método:
AnchoMax (maximo , url_imagen);
Resultado:
Crea una imagen de un ancho máximo = “maximo”, sin importar el alto.

Método:
AltoMax (maximo , url_imagen);
Resultado:
Crea una imagen de un alto máximo = “maximo”, sin importar el ancho.

Método:
Encuadrar (maximo , url_imagen, alineacion);
Resultado:
Recorta un cuadrado de lados = “maximo”, y lo alinea sobre la imagen recurso según se disponga.




Mayo 23rd, 2008 at 11:30 am
Saludos, muy clara la explicaion, donde puedo bajar la libreria GD ?, gracias, me pueden responder al correo…
Mayo 23rd, 2008 at 12:12 pm
Hola Osvaldo.
La libreria GD es un modulo que viene en PHP, el problema que pueda presentarse es que el servidor de tu web no lo tenga activado, pero es raro.