rodrigobertin
5/22/2015 - 3:20 PM

image resize class RNB

image resize class RNB

<?php

class ThumbImages
{
  public $imagenFinal;
  public $existe;
  public $extension;
  private $cacheFolder;


  //determinar la carpeta del cache
  public function __construct() {
    $this->cacheFolder='../images/cache/';
  }

  //seguridad
  private function soloImagen($imagen) {
    $ver=array(1, 2, 3);
    @$verExtesion=exif_imagetype($imagen);
    //si no esta
    if(!in_array($verExtesion,$ver)) {
      echo 'archivo <b>'.$imagen.'</b> no permitido';
      exit();
    }
  }

  //verificar si existe
  public function verificar($imagen, $maxWidth, $maxHeight) {

    $extension=exif_imagetype($imagen);

    switch ($extension) {
      //imagen gif
      case 1:
        $ext='.gif';
        break;
      //imagen jpeg
      case 2:
        $ext='.jpeg';
        break;
      //imagen png
      case 3:
        $ext='.png';
        break;
    }

    //ver
    $imgGenerada=$maxWidth.'_'.$maxHeight.'_'.md5($imagen).$ext;

    //verificar
    if (file_exists($this->cacheFolder.$imgGenerada)) {
      //echo 'No necesito crearla de vuelta<hr>';
      $this->existe='si';
    } else {
      //echo 'Necesito crearla de vuelta<hr>';
      $this->existe='no';
    }

    //retornar la extension
    $this->extension=$ext;
    return $this->extension;
  }

  //crear la miniatura
  public function crearThumb($imageRezise, $maxWidth=0, $maxHeigth=0) {

    //la imagen y sus datos
    $ancho_deseado=$maxWidth;
    $alto_deseado=$maxHeigth;
    
    //el archivo final
    $fileDest=$this->cacheFolder.$maxWidth.'_'.$maxHeigth.'_'.md5($imageRezise);

    //realizar verificacion de seguridad
    self::soloImagen($imageRezise);

    //realizar la verificacion inicial
    self::verificar($imageRezise, $maxWidth, $maxHeigth);

    //si no existe en el cacheo la guardo
    if ($this->existe == 'no') {

      //Tamaño original
      $info_fuente=getimagesize($imageRezise);
      $ancho_original=$info_fuente[0];
      $alto_original=$info_fuente[1];

      //el tipo de mime
      $tipo_mime=$info_fuente['mime'];

      //=== si no se pone el alto ====//
      if (($maxHeigth == 0) && isset($maxWidth)) {
        //si no pone alto
        $alto_deseado=($ancho_deseado * $alto_original) / $ancho_original;
      } else {
        //si pone alto se fuerza
        $alto_deseado=$maxHeigth;
      }

      //==== si no se pone el ancho ==//
      if (($maxWidth == 0) && isset($maxHeigth)) {
        //si no pone ancho
        $ancho_deseado=($alto_deseado * $ancho_original) / $alto_original;
      } else {
        //si pone ancho se fuerza
        $ancho_deseado=$maxWidth;
      }

      //===== poner la imagen tal cual si no se pasan parametros =====//
      if (($maxWidth == 0) && ($maxHeigth == 0)) {
        $ancho_deseado=$ancho_original;
        $alto_deseado=$alto_original;
      }

      $recurso_copia=imagecreatetruecolor($ancho_deseado, $alto_deseado);

      //segun el tipo creo
      if ($tipo_mime == 'image/png') {
        //--> Generar para png
        //la extension
        $ext='.png';

        //poner fondo transparente
        $recurso_fuente=imagecreatefrompng($imageRezise);
        imagealphablending($recurso_copia, false);
        imagesavealpha($recurso_copia, true);
        $transparent=imagecolorallocatealpha($recurso_copia, 255, 255, 255, 127);
        imagefilledrectangle($recurso_copia, 0, 0, $ancho_deseado, $alto_deseado, $transparent);

        //crear la imagen
        imagecopyresampled($recurso_copia, $recurso_fuente, 0, 0, 0, 0, $ancho_deseado, $alto_deseado, $info_fuente[0], $info_fuente[1]);

      } elseif ($tipo_mime == 'image/jpeg') {
        //---> Generar para jpeg
        //extension
        $ext='.jpeg';
        //generar
        $recurso_fuente=imagecreatefromjpeg($imageRezise);
        imagecopyresampled($recurso_copia, $recurso_fuente, 0, 0, 0, 0, $ancho_deseado, $alto_deseado, $info_fuente[0], $info_fuente[1]);


      } elseif ($tipo_mime == 'image/gif') {
        //---> Generar para gif
        //extension
        $ext='.gif';

        //poner fondo transparente
        $recurso_fuente=imagecreatefromgif($imageRezise);
        imagealphablending($recurso_copia, false);
        imagesavealpha($recurso_copia, true);
        $transparent=imagecolorallocatealpha($recurso_copia, 255, 255, 255, 127);
        imagefilledrectangle($recurso_copia, 0, 0, $ancho_deseado, $alto_deseado, $transparent);

        //crear la imagen
        imagecopyresampled($recurso_copia, $recurso_fuente, 0, 0, 0, 0, $ancho_deseado, $alto_deseado, $info_fuente[0], $info_fuente[1]);

      }


      //crear segun el tipo
      //@header('Content-type: '.$tipo_mime);
      $archivoFinal=$fileDest.$ext;

      switch ($tipo_mime) {
        //crear png
        case 'image/png':
          imagepng($recurso_copia, $archivoFinal);
          break;

        //crear gif
        case 'image/gif':
          imagepng($recurso_copia, $archivoFinal, 90);
          break;

        //crear jpeg
        case 'image/jpeg':
          imagejpeg($recurso_copia, $archivoFinal, 90);
          break;
      }

      $this->imagenFinal=$archivoFinal;
      return $this->imagenFinal;

      //eliminar de memoria
      imagedestroy($recurso_copia);
      imagedestroy($recurso_fuente);

    } else {

      //toma la imagen de la carpeta
      $this->imagenFinal=$this->cacheFolder.$maxWidth.'_'.$maxHeigth.'_'.md5($imageRezise).$this->extension;
      return $this->imagenFinal;
    }


  }

}

//utilizar
$imagenOrig='http://www.lenovo.com/images/OneWebImages/FormFactor/Tablets/Lenovo/400x300/lenovo-yoga-tablet-10-hd-plus-front.png';
//$imagenOrig='http://rodrigonb.com.ar/rnb.pdf';
$test=new ThumbImages();
$test->crearThumb($imagenOrig, 300);
?>

<img src="<?php echo $test->imagenFinal ?>" alt=""/>