Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/10/2014, 01:44
Avatar de ema_cs_2010
ema_cs_2010
 
Fecha de Ingreso: noviembre-2010
Mensajes: 8
Antigüedad: 14 años
Puntos: 0
Información [APORTE] Librería GD Image Resize

Hoy andaba necesitando una librería para redimensionar imágenes, busque y busque y no encontré ninguna que me satisficiera.

Soy casi un principiante en PHP,esta no es mi área xd. Si alguien ve algún error o tiene alguna sugerencia para hacer algo de una mejor forma porfavor comente :D.

__________________________________________________ ________

Es una simple librería para redimensionar/convertir imágenes usando GD.

Soporta:
- Formatos PNG, JPG y GIF.
- Transparencia.
- Imagen PNG indexada (8pbb)
- Transparencia en imágenes de 8bpp

(Para la semana que viene agrego soporte para salida de gif animado)


Código PHP:
<?php

/**
 * GD Image Resize
 * By Destro
 ==============================================================
 
 object new GDimage_resize($ImageFile);
 
 
 * Indica que la salida sera una imagen GIF
 object->out_gif()
 
 
 * Indica que la salida sera una imagen JPG
   - Quality:
      La calidad de la imagen, valores entre 0(mala) y 100(buena) 
 object->out_jpg($Quality=75)
 
 
 * Indica que la salida sera una imagen PNG
  - Quality:
     Compresion de la imagen, valores entre 0(baja) y 9(alta)
  - Filters:
     PNG_NO_FILTER: 0
     PNG_FILTER_NONE: 8
     PNG_FILTER_SUB: 16
     PNG_FILTER_UP: 32
     PNG_FILTER_AVG: 64
     PNG_FILTER_PAETH: 128
     PNG_ALL_FILTERS: 248
  - IndexedColors:
     Define la cantidad de colores para la paleta, valores de 1 a 255 
  - Dither:
     Indica si la imagen debería ser entramada
  - TransColor:
     Define el color que sera transparente, array('r' 'g' 'b')
 object->out_png($Quality=9, $Filters=0, $IndexedColors=0, $Dither=false, $TransColor=false)

 
 * Redimensiona/Convierte una imagen
   - Out_FileName:
      Ruta en la que guardar la imagen, Si no se establece, o su valor es NULL, se mostrará directamente en la salida el flujo de imagen.
   - Width:
      Ancho de la imagen, si es 0 se calcula en proporción a la altura(height)
   - Height:
      Altura de la imagen, si es 0 se calcula en proporción a la anchura(width)
   - Return_resource:
      La imagen no se guarda ni se muestra, se devuelve un recurso imagen.
   - Return:
      Devuelve false si ocurre algún error, de lo contrario true o un recurso imagen si Return_resourc esta en true.
 object->resize($Out_FileName, $width, $height, $return_resource=false);
*/

class GDimage_resize
{
    private 
$imgStream;
    private 
$imgNewWidth;
    private 
$imgNewHeight;
    
    private 
$imgOutName;
    private 
$imgOutType;
    private 
$imgOutQuality;
    private 
$imgOutPNGFilters;
    private 
$imgOutIndex;
    private 
$imgOutIndexedColor;
    private 
$imgOutDither;
    private 
$imgOutTransColor;
    
    public 
$imgSrc;
    public 
$imgWidth;
    public 
$imgHeight;
    public 
$imgType;
    
//public $imgGIFAnim;

    
public function __construct($ImageFile)
    {
        
$imgInfo = @getimagesize($ImageFile);

        if(!
$imgInfo || $imgInfo[2] < || $imgInfo[2] > 3) exit;
        
        
$this->imgStream file_get_contents($ImageFile);
        
        
$this->imgSrc imagecreatefromstring($this->imgStream);
        if(
$this->imgSrc == false) exit;
        
        
$this->imgWidth $imgInfo[0];
        
$this->imgHeight $imgInfo[1];
        
$this->imgType $imgInfo[2];
        
        
//if($this->imgType == 1) $this->imgGIFAnim = $this->gifAnim();
    
}
    
    public function 
out_gif()
    {
        
$this->imgOutType 1;
    }
    
    public function 
out_jpg($Quality=75)
    {
        
$this->imgOutType 2;
        
$this->imgOutQuality $Quality;
    }
    
    public function 
out_png($Quality=9$Filters=0$IndexedColors=0$Dither=false$TransColor=false)
    {
        
$this->imgOutType 3;
        
$this->imgOutQuality $Quality;
        
$this->imgOutPNGFilters $Filters;
        
$this->imgOutIndexedColor $IndexedColors;
        
$this->imgOutDither $Dither;
        
$this->imgOutTransColor $TransColor;
    }
    
    public function 
resize($Out_FileName$width$height$return_resource=false)
    {
        
$this->imgOutName $Out_FileName;
        
        if(
$width && $height)
        {
            
$this->imgNewWidth $width;
            
$this->imgNewHeight $height;
        }
        else if(
$width)
        {
            
$ration $width/$this->imgWidth;
            
$this->imgNewWidth $width;
            
$this->imgNewHeight $this->imgHeight*$ration;
        }
        else if(
$height) {
            
$ration $height/$this->imgHeight;
            
$this->imgNewHeight $height;
            
$this->imgNewWidth $this->imgWidth*$ration;
        }
        else {
            
$this->imgNewWidth $this->imgWidth;
            
$this->imgNewHeight $this->imgHeight;
        }

        
/*if($this->imgGIFAnim && $this->imgOutType <= 1)
        {
            echo "no support";
            return false;
        }*/
        
        
return $this->resize_and_convert($return_resource);
    }

    private function 
resize_and_convert($return_resource)
    {
        if(
$this->imgType != 1)
            
$thumb imagecreatetruecolor($this->imgNewWidth$this->imgNewHeight);
        else 
$thumb imagecreate($this->imgNewWidth$this->imgNewHeight);
        
        if(
$this->imgType == 1// GIF
        
{
            
$trans_color imagecolortransparent($this->imgSrc);
            if(
$trans_color >= && $trans_color imagecolorstotal($this->imgSrc))
            {
                
$trans imagecolorsforindex($this->imgSrc$trans_color);
                
$new_trans_color imagecolorallocate($thumb$trans['red'], $trans['blue'], $trans['green']);
                
imagefill($thumb00$new_trans_color);
                
imagecolortransparent($thumb$new_trans_color);
            }
            
imagecopyresized($thumb$this->imgSrc0000$this->imgNewWidth$this->imgNewHeight$this->imgWidth$this->imgHeight);
        }
        else 
// PNG / JPG
        
{    
            if(
$this->imgType == 3// PNG
            
{
                if(!
$this->imgOutIndexedColor)
                {
                    
imagealphablending($thumbfalse);
                    
imagefill($thumb00imagecolorallocatealpha($thumb000127));
                    
imagesavealpha($thumbtrue);
                }
                else if(
is_array($this->imgOutTransColor))
                {
                    
imagefill($thumb00,
                    
imagecolorallocate($thumb$this->imgOutTransColor['r'], $this->imgOutTransColor['g'], $this->imgOutTransColor['b']));
                }
            }
            
            
imagecopyresampled($thumb$this->imgSrc0000$this->imgNewWidth$this->imgNewHeight$this->imgWidth$this->imgHeight);
        }

        if(
$this->imgOutIndexedColor && $this->imgType == 3)
        {
            
imagetruecolortopalette($thumb$this->imgOutDither$this->imgOutIndexedColor);
            
            if(
is_array($this->imgOutTransColor))
            {
                
imagecolortransparent($thumb,
                
imagecolorclosest($thumb$this->imgOutTransColor['r'], $this->imgOutTransColor['g'], $this->imgOutTransColor['b']));
            }
        }

        if(
$return_resource)
            return 
$thumb;
            
        if(
$this->imgOutType$OutType $this->imgOutType;
        else 
$OutType $this->imgType;
        
        if(
$OutType == 1imagegif($thumb$this->imgOutName);
        else if(
$OutType == 2imagejpeg($thumb$this->imgOutName$this->imgOutQuality);
        else 
imagepng($thumb$this->imgOutName$this->imgOutQuality$this->imgOutPNGFilters);

        
imagedestroy($thumb);
        return 
true;
    }
}

Ejemplo:
Código PHP:
<?php

require_once "resizer_class.php";
 
 
$imagen = new GDimage_resize("original.png");
if(!
$imagen)
{
    echo 
"Error al cargar la imagen";
    exit;
}

$imagen->out_png();
$resize $imagen->resize("salida.png"200200);

$imagen->out_gif();
$resize $imagen->resize("salida.gif"1000);

$imagen->out_jpg(100);
$resize $imagen->resize("salida.jpg"0300);

echo 
"Imagen redimensionada";

?>

Última edición por ema_cs_2010; 17/10/2014 a las 01:51