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] < 1 || $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 >= 0 && $trans_color < imagecolorstotal($this->imgSrc))
{
$trans = imagecolorsforindex($this->imgSrc, $trans_color);
$new_trans_color = imagecolorallocate($thumb, $trans['red'], $trans['blue'], $trans['green']);
imagefill($thumb, 0, 0, $new_trans_color);
imagecolortransparent($thumb, $new_trans_color);
}
imagecopyresized($thumb, $this->imgSrc, 0, 0, 0, 0, $this->imgNewWidth, $this->imgNewHeight, $this->imgWidth, $this->imgHeight);
}
else // PNG / JPG
{
if($this->imgType == 3) // PNG
{
if(!$this->imgOutIndexedColor)
{
imagealphablending($thumb, false);
imagefill($thumb, 0, 0, imagecolorallocatealpha($thumb, 0, 0, 0, 127));
imagesavealpha($thumb, true);
}
else if(is_array($this->imgOutTransColor))
{
imagefill($thumb, 0, 0,
imagecolorallocate($thumb, $this->imgOutTransColor['r'], $this->imgOutTransColor['g'], $this->imgOutTransColor['b']));
}
}
imagecopyresampled($thumb, $this->imgSrc, 0, 0, 0, 0, $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 == 1) imagegif($thumb, $this->imgOutName);
else if($OutType == 2) imagejpeg($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", 200, 200);
$imagen->out_gif();
$resize = $imagen->resize("salida.gif", 100, 0);
$imagen->out_jpg(100);
$resize = $imagen->resize("salida.jpg", 0, 300);
echo "Imagen redimensionada";
?>