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



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:
  1. <?php
  2.  class somaImagen{
  3.  var $imagen_recurso; var $imagen_salida;
  4.  var $imagen_recurso_ancho; var $imagen_salida_ancho;
  5.  var $imagen_recurso_alto; var $imagen_salida_alto;
  6.  var $imagen_recurso_desde_x = 0; var $imagen_salida_desde_x = 0;
  7.  var $imagen_recurso_desde_y = 0; var $imagen_salida_desde_y = 0;
  8.  var $escala; var $imagen_imprimible;
  9.  var $rango_menor = 1;
  10.  var $rango_mayor = 1000;
  11.  
  12.  function validarMedida($valor){
  13.  if ($valor>=($this->rango_menor) and $valor<$this->rango_mayor){
  14.  return $valor;
  15.  }else{
  16.  if($valor <= ($this->rango_menor-1) ){return ($this->rango_menor); }
  17.  if($valor>= $this->rango_mayor ){return $this->rango_mayor ; }
  18.  }
  19.  }
  20.  
  21.  function crearImagen($imagen){
  22.  $this->imagen_recurso = $imagen;
  23.  $this->imagen_salida = imagecreatefromjpeg($this->imagen_recurso);
  24.  $this->imagen_recurso_ancho = imagesx($this->imagen_salida);
  25.  $this->imagen_recurso_alto = imagesy($this->imagen_salida);
  26.  }
  27.  
  28.  
  29.  function crearSalida($ancho,$alto){
  30.  $this->imagen_salida_ancho = $ancho;
  31.  $this->imagen_salida_alto = $alto;
  32.  $this->imagen_imprimible = imagecreatetruecolor($this->imagen_salida_ancho,$this->imagen_salida_alto);
  33.  imagecopyresampled(
  34.  $this->imagen_imprimible,
  35.  $this->imagen_salida,
  36.  $this->imagen_recurso_desde_x,
  37.  $this->imagen_recurso_desde_y,
  38.  $this->imagen_salida_desde_x,
  39.  $this->imagen_salida_desde_y,
  40.  $this->imagen_salida_ancho,
  41.  $this->imagen_salida_alto,
  42.  $this->imagen_recurso_ancho,
  43.  $this->imagen_recurso_alto
  44.  );
  45.  imagejpeg($this->imagen_imprimible, NULL,100);
  46.  imagedestroy($this->imagen_imprimible);
  47.  }
  48.  
  49.  function Cuadro($lados,$imagen){
  50.  $lados=$this->validarMedida($lados);
  51.  $this->crearImagen($imagen);
  52.  if ( $this->imagen_recurso_ancho>= $this->imagen_recurso_alto )
  53.  {$this->escala=$lados/$this->imagen_recurso_ancho;}
  54.             else
  55.  {$this->escala=$lados/$this->imagen_recurso_alto;}
  56.  $this->crearSalida($this->imagen_recurso_ancho * $this->escala , $this->imagen_recurso_alto * $this->escala);
  57.  }
  58.  
  59.  function AnchoMax($ancho,$imagen){
  60.  $ancho=$this->validarMedida($ancho);
  61.  $this->crearImagen($imagen);
  62.  $this->escala=$ancho/$this->imagen_recurso_ancho;
  63.  $this->crearSalida($this->imagen_recurso_ancho * $this->escala , $this->imagen_recurso_alto * $this->escala);
  64.  }
  65.  
  66.  
  67.  function AltoMax($alto,$imagen){
  68.  $alto=$this->validarMedida($alto);
  69.  $this->crearImagen($imagen);
  70.  $this->escala=$alto/$this->imagen_recurso_alto;
  71.  $this->crearSalida($this->imagen_recurso_ancho * $this->escala , $this->imagen_recurso_alto * $this->escala);
  72.  }
  73.  
  74.  function Encuadrar($medida,$imagen,$alineacion){
  75.  $medida=$this->validarMedida($medida);
  76.  $this->crearImagen($imagen);
  77.  if ( $this->imagen_recurso_ancho <= $this->imagen_recurso_alto ){
  78.  $this->escala = $this->imagen_salida_ancho/$this->imagen_recurso_ancho;
  79.  if($alineacion!=0){
  80.  if($alineacion==1){
  81.  $this->imagen_salida_desde_y=($this->imagen_recurso_alto-$this->imagen_recurso_ancho);
  82.  }
  83.  if($alineacion==2){
  84.  $this->imagen_salida_desde_y=($this->imagen_recurso_alto-$this->imagen_recurso_ancho)/2;
  85.  }
  86.  }
  87.  $this->imagen_recurso_alto = $this->imagen_recurso_ancho;
  88.  }else {
  89.  $this->escala = $this->imagen_salida_alto/$this->imagen_recurso_alto;
  90.  if($alineacion!=0){
  91.  if($alineacion==1){
  92.  $this->imagen_salida_desde_x=($this->imagen_recurso_ancho-$this->imagen_recurso_alto);
  93.  }
  94.  if($alineacion==2){
  95.  $this->imagen_salida_desde_x=($this->imagen_recurso_ancho-$this->imagen_recurso_alto)/2;
  96.  }
  97.  }
  98.  $this->imagen_recurso_ancho = $this->imagen_recurso_alto;
  99.  }
  100.  $this->crearSalida($medida,$medida);
  101.  }
  102.  }
  103. ?>

Aqui les muestro lo que pueden obtener con los metodos.

PHP:
  1. <?php
  2. header('Content-type: image/jpeg');
  3. include('img.inc.php');
  4. $imagen = new somaImagen();
  5. $imagen->Encuadrar(200,'carpeta/imagen.jpg',2);
  6. ?>

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.

Sphere: Related Content

2 Responses. Leave Yours?

  1. Gravatar
    Osvaldo //

    Saludos, muy clara la explicaion, donde puedo bajar la libreria GD ?, gracias, me pueden responder al correo…

  2. Gravatar
    Diego Ignacio //

    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.

Leave a Reply