Definimos una serie de atributos para almacenar el nombre de archivo a procesar, su extensión y
su nuevo ancho y alto:
private $archi;
private $extension;
private $ancho;
private $alto;
El constructor recibe el nombre de archivo a redimensionar y el nuevo ancho y alto en píxeles:
public function __construct($archi,$ancho=100,$alto=100)
Copiamos los parámetros a los atributos de la clase y extraemos la extensión del archivo a procesar:
$this->archi=$archi;
$vec=explode('.',$archi);
$this->extension=strtoupper($vec[sizeof($vec)-1]);
$this->ancho=$ancho;
$this->alto=$alto;
}
El método guardarEnDisco recibe la referencia de la imagen ($imagen) generada en memoria y
el nombre del archivo a donde debemos almacenarla:
private function guardarEnDisco($imagen,$archinuevo)
{
$vec=explode('.',$archinuevo);
$ext=strtoupper($vec[sizeof($vec)-1]);
switch ($ext) {
case "PNG":
imagepng($imagen,$archinuevo);
break;
case "GIF":
imagegif($imagen,$archinuevo);
break;
case "JPG":;
case "JPEG":
imagejpeg($imagen,$archinuevo);
break;
}
}
El método guardar recibe el nombre del nuevo archivo a generar, genera una imagen en memoria y
llama al método privado guardarEnDisco:
public function guardar($archinue)
{
$tam=getimagesize($this->archi);
$imagen=imagecreatetruecolor($this->ancho,$this->alto);
switch ($this->extension) {
case "PNG":
$origen=imagecreatefrompng($this->archi);
imagecopyresampled($imagen,$origen,0,0,0,0,$this->ancho,$this->alto,$tam[0],$tam[1]);
$this->guardarEnDisco($imagen,$archinue);
break;
case "GIF":
$origen=imagecreatefromgif($this->archi);
imagecopyresampled($imagen,$origen,0,0,0,0,$this->ancho,$this->alto,$tam[0],$tam[1]);
$this->guardarEnDisco($imagen,$archinue);
break;
case "JPG":;
case "JPEG":
$origen=imagecreatefromjpeg($this->archi);
imagecopyresampled($imagen,$origen,0,0,0,0,$this->ancho,$this->alto,$tam[0],$tam[1]);
$this->guardarEnDisco($imagen,$archinue);
break;
}
}
El método redimensionar asigna nuevos valores a los atributos ancho y alto según el porcentaje que
llega como parámetro:
public function redimensionar($porc)
{
$tam=getimagesize($this->archi);
$this->ancho=$tam[0]*$porc;
$this->alto=$tam[1]*$porc;
}